12 #ifndef ROOT_XrdProofdPriorityMgr 
   13 #define ROOT_XrdProofdPriorityMgr 
   28 #include "XrdOuc/XrdOucHash.hh" 
   29 #include "XrdOuc/XrdOucString.hh" 
   33 class XrdProofdDirective;
 
   34 class XrdProofdManager;
 
   39 #define XPPM_NOPRIORITY 999999 
   40 class XrdProofdSessionEntry {
 
   49    XrdProofdSessionEntry(
const char *u, 
const char *g, 
int pid);
 
   50    virtual ~XrdProofdSessionEntry();
 
   52    int          SetPriority(
int priority = XPPM_NOPRIORITY);
 
   55 class XrdProofdPriorityMgr : 
public XrdProofdConfig {
 
   57    XrdSysRecMutex    fMutex;          
 
   59    XrdProofdManager *fMgr;
 
   60    XrdOucHash<XrdProofdSessionEntry> fSessions; 
 
   61    XrdOucHash<XrdProofdPriority> fPriorities; 
 
   69    void              RegisterDirectives();
 
   70    int               DoDirectivePriority(
char *, XrdOucStream *, 
bool);
 
   71    int               DoDirectiveSchedOpt(
char *, XrdOucStream *, 
bool);
 
   74    XrdProofdPriorityMgr(XrdProofdManager *mgr, XrdProtocol_Config *pi, XrdSysError *e);
 
   75    virtual ~XrdProofdPriorityMgr() { }
 
   77    enum PMProtocol { kChangeStatus = 0, kSetGroupPriority = 1 };
 
   79    int               Config(
bool rcf = 0);
 
   80    int               DoDirective(XrdProofdDirective *d,
 
   81                                  char *val, XrdOucStream *cfg, 
bool rcf);
 
   83    inline XrdProofdPipe *Pipe() { 
return &fPipe; }
 
   85    int               AddSession(
const char *u, 
const char *g, 
int pid);
 
   86    int               RemoveSession(
int pid);
 
   87    void              SetGroupPriority(
const char *grp, 
int priority);
 
   90    bool              IsSchedOn() { 
return ((fSchedOpt != kXPD_sched_off) ? 1 : 0); }
 
   91    int               SetNiceValues(
int opt = 0);
 
   92    void              SetSchedOpt(
int opt) { XrdSysMutexHelper mhp(&fMutex);
 
   94    int               SetProcessPriority(
int pid, 
const char *usr, 
int &dp);