12 #ifndef ROOT_XrdProofGroup
13 #define ROOT_XrdProofGroup
27 #include "XrdOuc/XrdOucHash.hh"
28 #include "XrdOuc/XrdOucString.hh"
34 class XrdProofGroupMember {
40 XrdProofGroupMember(
const char *n) : fName(n) { fActive = 0; }
41 virtual ~XrdProofGroupMember() { }
43 int Active()
const {
return fActive; }
44 void Count(
int n) { fActive += n; }
45 const char *Name()
const {
return fName.c_str(); }
49 friend class XrdProofGroupMgr;
53 XrdOucString fMembers;
55 XrdOucHash<XrdProofGroupMember> fActives;
62 XrdSysRecMutex *fMutex;
64 void AddMember(
const char *usr) { XrdSysMutexHelper mhp(fMutex);
65 fMembers += usr; fMembers +=
","; fSize++; }
66 XrdProofGroup(
const char *n,
const char *m = 0);
71 int Active(
const char *usr = 0);
72 bool HasMember(
const char *usr);
74 inline const char *Members()
const { XrdSysMutexHelper mhp(fMutex);
return fMembers.c_str(); }
75 inline const char *Name()
const { XrdSysMutexHelper mhp(fMutex);
return fName.c_str(); }
76 inline int Size()
const { XrdSysMutexHelper mhp(fMutex);
return fSize; }
78 inline int Fraction()
const { XrdSysMutexHelper mhp(fMutex);
return fFraction; }
79 inline float FracEff()
const { XrdSysMutexHelper mhp(fMutex);
return fFracEff; }
80 inline float Priority()
const { XrdSysMutexHelper mhp(fMutex);
return fPriority; }
81 void SetFracEff(
float f) { XrdSysMutexHelper mhp(fMutex); fFracEff = f; }
82 void SetFraction(
int f) { XrdSysMutexHelper mhp(fMutex); fFraction = f; }
83 void SetPriority(
float p) { XrdSysMutexHelper mhp(fMutex); fPriority = p; }
85 void Count(
const char *usr,
int n = 1);
93 class XrdProofGroupMgr {
95 XrdOucString fIterator;
96 XrdOucHash<XrdProofGroup> fGroups;
97 XrdSysRecMutex fMutex;
99 XrdProofdFile fCfgFile;
100 XrdProofdFile fPriorityFile;
102 int ParseInfoFrom(
const char *fn);
105 XrdProofGroupMgr(
const char *fn = 0);
106 ~XrdProofGroupMgr() { }
108 int Config(
const char *fn);
110 int ReadPriorities();
111 int SetEffectiveFractions(
bool optprio);
113 XrdProofGroup *Apply(
int (*f)(
const char *, XrdProofGroup *,
void *),
void *arg);
115 XrdOucString Export(
const char *grp);
116 int Num() {
return fGroups.Num(); }
117 void Print(
const char *grp);
119 XrdProofGroup *GetGroup(
const char *grp);
120 XrdProofGroup *GetUserGroup(
const char *usr,
const char *grp = 0);
122 const char *GetCfgFile()
const {
return fCfgFile.fName.c_str(); }
125 void ResetIter() { fIterator =
"getnextgrp:"; }
126 XrdProofGroup *Next();
139 XpdGroupGlobal_t *glo;