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