1*a77aa747SAxel Dörfler /* 2*a77aa747SAxel Dörfler * Copyright 2017-2018, Axel Dörfler, axeld@pinc-software.de. 3*a77aa747SAxel Dörfler * Distributed under the terms of the MIT License. 4*a77aa747SAxel Dörfler */ 5*a77aa747SAxel Dörfler #ifndef LOG_H 6*a77aa747SAxel Dörfler #define LOG_H 7*a77aa747SAxel Dörfler 8*a77aa747SAxel Dörfler 9*a77aa747SAxel Dörfler #include <String.h> 10*a77aa747SAxel Dörfler 11*a77aa747SAxel Dörfler #include <locks.h> 12*a77aa747SAxel Dörfler #include <util/DoublyLinkedList.h> 13*a77aa747SAxel Dörfler 14*a77aa747SAxel Dörfler 15*a77aa747SAxel Dörfler class BMessage; 16*a77aa747SAxel Dörfler 17*a77aa747SAxel Dörfler class BaseJob; 18*a77aa747SAxel Dörfler class Event; 19*a77aa747SAxel Dörfler class Job; 20*a77aa747SAxel Dörfler 21*a77aa747SAxel Dörfler 22*a77aa747SAxel Dörfler enum LogItemType { 23*a77aa747SAxel Dörfler kJobInitialized, 24*a77aa747SAxel Dörfler kJobIgnored, 25*a77aa747SAxel Dörfler kJobLaunched, 26*a77aa747SAxel Dörfler kJobTerminated, 27*a77aa747SAxel Dörfler kJobEnabled, 28*a77aa747SAxel Dörfler kJobStopped, 29*a77aa747SAxel Dörfler kEvent, 30*a77aa747SAxel Dörfler kExternalEvent, 31*a77aa747SAxel Dörfler kExternalEventRegistered, 32*a77aa747SAxel Dörfler kExternalEventUnregistered, 33*a77aa747SAxel Dörfler }; 34*a77aa747SAxel Dörfler 35*a77aa747SAxel Dörfler 36*a77aa747SAxel Dörfler class LogItem : public DoublyLinkedListLinkImpl<LogItem> { 37*a77aa747SAxel Dörfler public: 38*a77aa747SAxel Dörfler public: 39*a77aa747SAxel Dörfler LogItem(); 40*a77aa747SAxel Dörfler virtual ~LogItem(); 41*a77aa747SAxel Dörfler When()42*a77aa747SAxel Dörfler bigtime_t When() 43*a77aa747SAxel Dörfler { return fWhen; } 44*a77aa747SAxel Dörfler BString Message() const; 45*a77aa747SAxel Dörfler 46*a77aa747SAxel Dörfler virtual LogItemType Type() const = 0; 47*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const = 0; 48*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const = 0; 49*a77aa747SAxel Dörfler virtual bool Matches(const char* jobName, 50*a77aa747SAxel Dörfler const char* eventName) = 0; 51*a77aa747SAxel Dörfler 52*a77aa747SAxel Dörfler private: 53*a77aa747SAxel Dörfler bigtime_t fWhen; 54*a77aa747SAxel Dörfler }; 55*a77aa747SAxel Dörfler 56*a77aa747SAxel Dörfler 57*a77aa747SAxel Dörfler typedef DoublyLinkedList<LogItem> LogItemList; 58*a77aa747SAxel Dörfler 59*a77aa747SAxel Dörfler 60*a77aa747SAxel Dörfler class Log { 61*a77aa747SAxel Dörfler public: 62*a77aa747SAxel Dörfler Log(); 63*a77aa747SAxel Dörfler 64*a77aa747SAxel Dörfler void Add(LogItem* item); 65*a77aa747SAxel Dörfler 66*a77aa747SAxel Dörfler LogItemList::Iterator Iterator()67*a77aa747SAxel Dörfler Iterator() 68*a77aa747SAxel Dörfler { return fItems.GetIterator(); } 69*a77aa747SAxel Dörfler Lock()70*a77aa747SAxel Dörfler mutex& Lock() 71*a77aa747SAxel Dörfler { return fLock; } 72*a77aa747SAxel Dörfler 73*a77aa747SAxel Dörfler void JobInitialized(Job* job); 74*a77aa747SAxel Dörfler void JobIgnored(Job* job, status_t status); 75*a77aa747SAxel Dörfler 76*a77aa747SAxel Dörfler void JobLaunched(Job* job, status_t status); 77*a77aa747SAxel Dörfler void JobTerminated(Job* job, status_t status); 78*a77aa747SAxel Dörfler 79*a77aa747SAxel Dörfler void JobEnabled(Job* job, bool enabled); 80*a77aa747SAxel Dörfler void JobStopped(BaseJob* job, bool force); 81*a77aa747SAxel Dörfler 82*a77aa747SAxel Dörfler void EventTriggered(BaseJob* job, Event* event); 83*a77aa747SAxel Dörfler 84*a77aa747SAxel Dörfler void ExternalEventTriggered(const char* name); 85*a77aa747SAxel Dörfler void ExternalEventRegistered(const char* name); 86*a77aa747SAxel Dörfler void ExternalEventUnregistered(const char* name); 87*a77aa747SAxel Dörfler 88*a77aa747SAxel Dörfler private: 89*a77aa747SAxel Dörfler mutex fLock; 90*a77aa747SAxel Dörfler LogItemList fItems; 91*a77aa747SAxel Dörfler size_t fCount; 92*a77aa747SAxel Dörfler }; 93*a77aa747SAxel Dörfler 94*a77aa747SAxel Dörfler 95*a77aa747SAxel Dörfler #endif // LOG_H 96