xref: /haiku/src/servers/launch/Log.h (revision a77aa747eaf779898d401614a11b98fe58dddf35)
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