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
6*a77aa747SAxel Dörfler
7*a77aa747SAxel Dörfler #include "Log.h"
8*a77aa747SAxel Dörfler
9*a77aa747SAxel Dörfler #include <OS.h>
10*a77aa747SAxel Dörfler
11*a77aa747SAxel Dörfler #include "Events.h"
12*a77aa747SAxel Dörfler #include "Job.h"
13*a77aa747SAxel Dörfler
14*a77aa747SAxel Dörfler
15*a77aa747SAxel Dörfler const size_t kMaxItems = 10000;
16*a77aa747SAxel Dörfler
17*a77aa747SAxel Dörfler
18*a77aa747SAxel Dörfler class AbstractJobLogItem : public LogItem {
19*a77aa747SAxel Dörfler public:
20*a77aa747SAxel Dörfler AbstractJobLogItem(BaseJob* job);
21*a77aa747SAxel Dörfler virtual ~AbstractJobLogItem();
22*a77aa747SAxel Dörfler
23*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
24*a77aa747SAxel Dörfler virtual bool Matches(const char* jobName,
25*a77aa747SAxel Dörfler const char* eventName);
26*a77aa747SAxel Dörfler
27*a77aa747SAxel Dörfler protected:
28*a77aa747SAxel Dörfler BaseJob* fJob;
29*a77aa747SAxel Dörfler };
30*a77aa747SAxel Dörfler
31*a77aa747SAxel Dörfler
32*a77aa747SAxel Dörfler class JobInitializedLogItem : public AbstractJobLogItem {
33*a77aa747SAxel Dörfler public:
34*a77aa747SAxel Dörfler JobInitializedLogItem(Job* job);
35*a77aa747SAxel Dörfler virtual ~JobInitializedLogItem();
36*a77aa747SAxel Dörfler
37*a77aa747SAxel Dörfler virtual LogItemType Type() const;
38*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
39*a77aa747SAxel Dörfler };
40*a77aa747SAxel Dörfler
41*a77aa747SAxel Dörfler
42*a77aa747SAxel Dörfler class JobIgnoredLogItem : public LogItem {
43*a77aa747SAxel Dörfler public:
44*a77aa747SAxel Dörfler JobIgnoredLogItem(Job* job, status_t error);
45*a77aa747SAxel Dörfler virtual ~JobIgnoredLogItem();
46*a77aa747SAxel Dörfler
47*a77aa747SAxel Dörfler virtual LogItemType Type() const;
48*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
49*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
50*a77aa747SAxel Dörfler virtual bool Matches(const char* jobName,
51*a77aa747SAxel Dörfler const char* eventName);
52*a77aa747SAxel Dörfler
53*a77aa747SAxel Dörfler private:
54*a77aa747SAxel Dörfler BString fJobName;
55*a77aa747SAxel Dörfler status_t fError;
56*a77aa747SAxel Dörfler };
57*a77aa747SAxel Dörfler
58*a77aa747SAxel Dörfler
59*a77aa747SAxel Dörfler class JobLaunchedLogItem : public AbstractJobLogItem {
60*a77aa747SAxel Dörfler public:
61*a77aa747SAxel Dörfler JobLaunchedLogItem(Job* job, status_t status);
62*a77aa747SAxel Dörfler virtual ~JobLaunchedLogItem();
63*a77aa747SAxel Dörfler
64*a77aa747SAxel Dörfler virtual LogItemType Type() const;
65*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
66*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
67*a77aa747SAxel Dörfler
68*a77aa747SAxel Dörfler private:
69*a77aa747SAxel Dörfler status_t fStatus;
70*a77aa747SAxel Dörfler };
71*a77aa747SAxel Dörfler
72*a77aa747SAxel Dörfler
73*a77aa747SAxel Dörfler class JobTerminatedLogItem : public AbstractJobLogItem {
74*a77aa747SAxel Dörfler public:
75*a77aa747SAxel Dörfler JobTerminatedLogItem(Job* job, status_t status);
76*a77aa747SAxel Dörfler virtual ~JobTerminatedLogItem();
77*a77aa747SAxel Dörfler
78*a77aa747SAxel Dörfler virtual LogItemType Type() const;
79*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
80*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
81*a77aa747SAxel Dörfler
82*a77aa747SAxel Dörfler private:
83*a77aa747SAxel Dörfler status_t fStatus;
84*a77aa747SAxel Dörfler };
85*a77aa747SAxel Dörfler
86*a77aa747SAxel Dörfler
87*a77aa747SAxel Dörfler class JobEnabledLogItem : public AbstractJobLogItem {
88*a77aa747SAxel Dörfler public:
89*a77aa747SAxel Dörfler JobEnabledLogItem(Job* job, bool enabled);
90*a77aa747SAxel Dörfler virtual ~JobEnabledLogItem();
91*a77aa747SAxel Dörfler
92*a77aa747SAxel Dörfler virtual LogItemType Type() const;
93*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
94*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
95*a77aa747SAxel Dörfler
96*a77aa747SAxel Dörfler private:
97*a77aa747SAxel Dörfler bool fEnabled;
98*a77aa747SAxel Dörfler };
99*a77aa747SAxel Dörfler
100*a77aa747SAxel Dörfler
101*a77aa747SAxel Dörfler class JobStoppedLogItem : public AbstractJobLogItem {
102*a77aa747SAxel Dörfler public:
103*a77aa747SAxel Dörfler JobStoppedLogItem(BaseJob* job, bool force);
104*a77aa747SAxel Dörfler virtual ~JobStoppedLogItem();
105*a77aa747SAxel Dörfler
106*a77aa747SAxel Dörfler virtual LogItemType Type() const;
107*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
108*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
109*a77aa747SAxel Dörfler
110*a77aa747SAxel Dörfler private:
111*a77aa747SAxel Dörfler bool fForce;
112*a77aa747SAxel Dörfler };
113*a77aa747SAxel Dörfler
114*a77aa747SAxel Dörfler
115*a77aa747SAxel Dörfler class EventLogItem : public AbstractJobLogItem {
116*a77aa747SAxel Dörfler public:
117*a77aa747SAxel Dörfler EventLogItem(BaseJob* job, Event* event);
118*a77aa747SAxel Dörfler virtual ~EventLogItem();
119*a77aa747SAxel Dörfler
120*a77aa747SAxel Dörfler virtual LogItemType Type() const;
121*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
122*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
123*a77aa747SAxel Dörfler virtual bool Matches(const char* jobName,
124*a77aa747SAxel Dörfler const char* eventName);
125*a77aa747SAxel Dörfler
126*a77aa747SAxel Dörfler private:
127*a77aa747SAxel Dörfler Event* fEvent;
128*a77aa747SAxel Dörfler };
129*a77aa747SAxel Dörfler
130*a77aa747SAxel Dörfler
131*a77aa747SAxel Dörfler class AbstractExternalEventLogItem : public LogItem {
132*a77aa747SAxel Dörfler public:
133*a77aa747SAxel Dörfler AbstractExternalEventLogItem(const char* name);
134*a77aa747SAxel Dörfler virtual ~AbstractExternalEventLogItem();
135*a77aa747SAxel Dörfler
136*a77aa747SAxel Dörfler virtual status_t GetParameter(BMessage& parameter) const;
137*a77aa747SAxel Dörfler virtual bool Matches(const char* jobName,
138*a77aa747SAxel Dörfler const char* eventName);
139*a77aa747SAxel Dörfler
140*a77aa747SAxel Dörfler protected:
141*a77aa747SAxel Dörfler BString fEventName;
142*a77aa747SAxel Dörfler };
143*a77aa747SAxel Dörfler
144*a77aa747SAxel Dörfler
145*a77aa747SAxel Dörfler class ExternalEventLogItem : public AbstractExternalEventLogItem {
146*a77aa747SAxel Dörfler public:
147*a77aa747SAxel Dörfler ExternalEventLogItem(const char* name);
148*a77aa747SAxel Dörfler virtual ~ExternalEventLogItem();
149*a77aa747SAxel Dörfler
150*a77aa747SAxel Dörfler virtual LogItemType Type() const;
151*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
152*a77aa747SAxel Dörfler };
153*a77aa747SAxel Dörfler
154*a77aa747SAxel Dörfler
155*a77aa747SAxel Dörfler class ExternalEventRegisteredLogItem : public AbstractExternalEventLogItem {
156*a77aa747SAxel Dörfler public:
157*a77aa747SAxel Dörfler ExternalEventRegisteredLogItem(
158*a77aa747SAxel Dörfler const char* name);
159*a77aa747SAxel Dörfler virtual ~ExternalEventRegisteredLogItem();
160*a77aa747SAxel Dörfler
161*a77aa747SAxel Dörfler virtual LogItemType Type() const;
162*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
163*a77aa747SAxel Dörfler };
164*a77aa747SAxel Dörfler
165*a77aa747SAxel Dörfler
166*a77aa747SAxel Dörfler class ExternalEventUnregisteredLogItem : public AbstractExternalEventLogItem {
167*a77aa747SAxel Dörfler public:
168*a77aa747SAxel Dörfler ExternalEventUnregisteredLogItem(
169*a77aa747SAxel Dörfler const char* name);
170*a77aa747SAxel Dörfler virtual ~ExternalEventUnregisteredLogItem();
171*a77aa747SAxel Dörfler
172*a77aa747SAxel Dörfler virtual LogItemType Type() const;
173*a77aa747SAxel Dörfler virtual status_t GetMessage(BString& target) const;
174*a77aa747SAxel Dörfler };
175*a77aa747SAxel Dörfler
176*a77aa747SAxel Dörfler
177*a77aa747SAxel Dörfler // #pragma mark -
178*a77aa747SAxel Dörfler
179*a77aa747SAxel Dörfler
LogItem()180*a77aa747SAxel Dörfler LogItem::LogItem()
181*a77aa747SAxel Dörfler :
182*a77aa747SAxel Dörfler fWhen(system_time())
183*a77aa747SAxel Dörfler {
184*a77aa747SAxel Dörfler }
185*a77aa747SAxel Dörfler
186*a77aa747SAxel Dörfler
~LogItem()187*a77aa747SAxel Dörfler LogItem::~LogItem()
188*a77aa747SAxel Dörfler {
189*a77aa747SAxel Dörfler }
190*a77aa747SAxel Dörfler
191*a77aa747SAxel Dörfler
192*a77aa747SAxel Dörfler BString
Message() const193*a77aa747SAxel Dörfler LogItem::Message() const
194*a77aa747SAxel Dörfler {
195*a77aa747SAxel Dörfler BString message;
196*a77aa747SAxel Dörfler GetMessage(message);
197*a77aa747SAxel Dörfler return message;
198*a77aa747SAxel Dörfler }
199*a77aa747SAxel Dörfler
200*a77aa747SAxel Dörfler
201*a77aa747SAxel Dörfler // #pragma mark - Log
202*a77aa747SAxel Dörfler
203*a77aa747SAxel Dörfler
Log()204*a77aa747SAxel Dörfler Log::Log()
205*a77aa747SAxel Dörfler :
206*a77aa747SAxel Dörfler fCount(0)
207*a77aa747SAxel Dörfler {
208*a77aa747SAxel Dörfler mutex_init(&fLock, "log lock");
209*a77aa747SAxel Dörfler }
210*a77aa747SAxel Dörfler
211*a77aa747SAxel Dörfler
212*a77aa747SAxel Dörfler void
Add(LogItem * item)213*a77aa747SAxel Dörfler Log::Add(LogItem* item)
214*a77aa747SAxel Dörfler {
215*a77aa747SAxel Dörfler MutexLocker locker(fLock);
216*a77aa747SAxel Dörfler if (fCount == kMaxItems)
217*a77aa747SAxel Dörfler fItems.Remove(fItems.First());
218*a77aa747SAxel Dörfler else
219*a77aa747SAxel Dörfler fCount++;
220*a77aa747SAxel Dörfler
221*a77aa747SAxel Dörfler fItems.Add(item);
222*a77aa747SAxel Dörfler }
223*a77aa747SAxel Dörfler
224*a77aa747SAxel Dörfler
225*a77aa747SAxel Dörfler void
JobInitialized(Job * job)226*a77aa747SAxel Dörfler Log::JobInitialized(Job* job)
227*a77aa747SAxel Dörfler {
228*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobInitializedLogItem(job);
229*a77aa747SAxel Dörfler if (item != NULL)
230*a77aa747SAxel Dörfler Add(item);
231*a77aa747SAxel Dörfler else
232*a77aa747SAxel Dörfler debug_printf("Initialized job \"%s\"\n", job->Name());
233*a77aa747SAxel Dörfler }
234*a77aa747SAxel Dörfler
235*a77aa747SAxel Dörfler
236*a77aa747SAxel Dörfler void
JobIgnored(Job * job,status_t status)237*a77aa747SAxel Dörfler Log::JobIgnored(Job* job, status_t status)
238*a77aa747SAxel Dörfler {
239*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobIgnoredLogItem(job, status);
240*a77aa747SAxel Dörfler if (item != NULL)
241*a77aa747SAxel Dörfler Add(item);
242*a77aa747SAxel Dörfler else {
243*a77aa747SAxel Dörfler debug_printf("Ignored job \"%s\": %s\n", job->Name(),
244*a77aa747SAxel Dörfler strerror(status));
245*a77aa747SAxel Dörfler }
246*a77aa747SAxel Dörfler }
247*a77aa747SAxel Dörfler
248*a77aa747SAxel Dörfler
249*a77aa747SAxel Dörfler void
JobLaunched(Job * job,status_t status)250*a77aa747SAxel Dörfler Log::JobLaunched(Job* job, status_t status)
251*a77aa747SAxel Dörfler {
252*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobLaunchedLogItem(job, status);
253*a77aa747SAxel Dörfler if (item != NULL)
254*a77aa747SAxel Dörfler Add(item);
255*a77aa747SAxel Dörfler else {
256*a77aa747SAxel Dörfler debug_printf("Launched job \"%s\": %s\n", job->Name(),
257*a77aa747SAxel Dörfler strerror(status));
258*a77aa747SAxel Dörfler }
259*a77aa747SAxel Dörfler }
260*a77aa747SAxel Dörfler
261*a77aa747SAxel Dörfler
262*a77aa747SAxel Dörfler void
JobTerminated(Job * job,status_t status)263*a77aa747SAxel Dörfler Log::JobTerminated(Job* job, status_t status)
264*a77aa747SAxel Dörfler {
265*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobTerminatedLogItem(job, status);
266*a77aa747SAxel Dörfler if (item != NULL)
267*a77aa747SAxel Dörfler Add(item);
268*a77aa747SAxel Dörfler else {
269*a77aa747SAxel Dörfler debug_printf("Terminated job \"%s\": %s\n", job->Name(),
270*a77aa747SAxel Dörfler strerror(status));
271*a77aa747SAxel Dörfler }
272*a77aa747SAxel Dörfler }
273*a77aa747SAxel Dörfler
274*a77aa747SAxel Dörfler
275*a77aa747SAxel Dörfler void
JobEnabled(Job * job,bool enabled)276*a77aa747SAxel Dörfler Log::JobEnabled(Job* job, bool enabled)
277*a77aa747SAxel Dörfler {
278*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobEnabledLogItem(job, enabled);
279*a77aa747SAxel Dörfler if (item != NULL)
280*a77aa747SAxel Dörfler Add(item);
281*a77aa747SAxel Dörfler else
282*a77aa747SAxel Dörfler debug_printf("Enabled job \"%s\": %d\n", job->Name(), enabled);
283*a77aa747SAxel Dörfler }
284*a77aa747SAxel Dörfler
285*a77aa747SAxel Dörfler
286*a77aa747SAxel Dörfler void
JobStopped(BaseJob * job,bool force)287*a77aa747SAxel Dörfler Log::JobStopped(BaseJob* job, bool force)
288*a77aa747SAxel Dörfler {
289*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) JobStoppedLogItem(job, force);
290*a77aa747SAxel Dörfler if (item != NULL)
291*a77aa747SAxel Dörfler Add(item);
292*a77aa747SAxel Dörfler else
293*a77aa747SAxel Dörfler debug_printf("Stopped job \"%s\"\n", job->Name());
294*a77aa747SAxel Dörfler }
295*a77aa747SAxel Dörfler
296*a77aa747SAxel Dörfler
297*a77aa747SAxel Dörfler void
EventTriggered(BaseJob * job,Event * event)298*a77aa747SAxel Dörfler Log::EventTriggered(BaseJob* job, Event* event)
299*a77aa747SAxel Dörfler {
300*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) EventLogItem(job, event);
301*a77aa747SAxel Dörfler if (item != NULL)
302*a77aa747SAxel Dörfler Add(item);
303*a77aa747SAxel Dörfler else {
304*a77aa747SAxel Dörfler debug_printf("Event triggered for \"%s\": %s\n", job->Name(),
305*a77aa747SAxel Dörfler event->ToString().String());
306*a77aa747SAxel Dörfler }
307*a77aa747SAxel Dörfler }
308*a77aa747SAxel Dörfler
309*a77aa747SAxel Dörfler
310*a77aa747SAxel Dörfler void
ExternalEventTriggered(const char * name)311*a77aa747SAxel Dörfler Log::ExternalEventTriggered(const char* name)
312*a77aa747SAxel Dörfler {
313*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) ExternalEventLogItem(name);
314*a77aa747SAxel Dörfler if (item != NULL)
315*a77aa747SAxel Dörfler Add(item);
316*a77aa747SAxel Dörfler else
317*a77aa747SAxel Dörfler debug_printf("External event triggered: %s\n", name);
318*a77aa747SAxel Dörfler }
319*a77aa747SAxel Dörfler
320*a77aa747SAxel Dörfler
321*a77aa747SAxel Dörfler void
ExternalEventRegistered(const char * name)322*a77aa747SAxel Dörfler Log::ExternalEventRegistered(const char* name)
323*a77aa747SAxel Dörfler {
324*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) ExternalEventRegisteredLogItem(name);
325*a77aa747SAxel Dörfler if (item != NULL)
326*a77aa747SAxel Dörfler Add(item);
327*a77aa747SAxel Dörfler else
328*a77aa747SAxel Dörfler debug_printf("External event registered: %s\n", name);
329*a77aa747SAxel Dörfler }
330*a77aa747SAxel Dörfler
331*a77aa747SAxel Dörfler
332*a77aa747SAxel Dörfler void
ExternalEventUnregistered(const char * name)333*a77aa747SAxel Dörfler Log::ExternalEventUnregistered(const char* name)
334*a77aa747SAxel Dörfler {
335*a77aa747SAxel Dörfler LogItem* item = new(std::nothrow) ExternalEventUnregisteredLogItem(name);
336*a77aa747SAxel Dörfler if (item != NULL)
337*a77aa747SAxel Dörfler Add(item);
338*a77aa747SAxel Dörfler else
339*a77aa747SAxel Dörfler debug_printf("External event unregistered: %s\n", name);
340*a77aa747SAxel Dörfler }
341*a77aa747SAxel Dörfler
342*a77aa747SAxel Dörfler
343*a77aa747SAxel Dörfler // #pragma mark - AbstractJobLogItem
344*a77aa747SAxel Dörfler
345*a77aa747SAxel Dörfler
AbstractJobLogItem(BaseJob * job)346*a77aa747SAxel Dörfler AbstractJobLogItem::AbstractJobLogItem(BaseJob* job)
347*a77aa747SAxel Dörfler :
348*a77aa747SAxel Dörfler fJob(job)
349*a77aa747SAxel Dörfler {
350*a77aa747SAxel Dörfler }
351*a77aa747SAxel Dörfler
352*a77aa747SAxel Dörfler
~AbstractJobLogItem()353*a77aa747SAxel Dörfler AbstractJobLogItem::~AbstractJobLogItem()
354*a77aa747SAxel Dörfler {
355*a77aa747SAxel Dörfler }
356*a77aa747SAxel Dörfler
357*a77aa747SAxel Dörfler
358*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const359*a77aa747SAxel Dörfler AbstractJobLogItem::GetParameter(BMessage& parameter) const
360*a77aa747SAxel Dörfler {
361*a77aa747SAxel Dörfler return parameter.AddString("job", fJob->Name());
362*a77aa747SAxel Dörfler }
363*a77aa747SAxel Dörfler
364*a77aa747SAxel Dörfler
365*a77aa747SAxel Dörfler bool
Matches(const char * jobName,const char * eventName)366*a77aa747SAxel Dörfler AbstractJobLogItem::Matches(const char* jobName, const char* eventName)
367*a77aa747SAxel Dörfler {
368*a77aa747SAxel Dörfler if (jobName == NULL && eventName == NULL)
369*a77aa747SAxel Dörfler return true;
370*a77aa747SAxel Dörfler
371*a77aa747SAxel Dörfler if (jobName != NULL && strcmp(fJob->Name(), jobName) == 0)
372*a77aa747SAxel Dörfler return true;
373*a77aa747SAxel Dörfler
374*a77aa747SAxel Dörfler return false;
375*a77aa747SAxel Dörfler }
376*a77aa747SAxel Dörfler
377*a77aa747SAxel Dörfler
378*a77aa747SAxel Dörfler // #pragma mark - JobInitializedLogItem
379*a77aa747SAxel Dörfler
380*a77aa747SAxel Dörfler
JobInitializedLogItem(Job * job)381*a77aa747SAxel Dörfler JobInitializedLogItem::JobInitializedLogItem(Job* job)
382*a77aa747SAxel Dörfler :
383*a77aa747SAxel Dörfler AbstractJobLogItem(job)
384*a77aa747SAxel Dörfler {
385*a77aa747SAxel Dörfler }
386*a77aa747SAxel Dörfler
387*a77aa747SAxel Dörfler
~JobInitializedLogItem()388*a77aa747SAxel Dörfler JobInitializedLogItem::~JobInitializedLogItem()
389*a77aa747SAxel Dörfler {
390*a77aa747SAxel Dörfler }
391*a77aa747SAxel Dörfler
392*a77aa747SAxel Dörfler
393*a77aa747SAxel Dörfler LogItemType
Type() const394*a77aa747SAxel Dörfler JobInitializedLogItem::Type() const
395*a77aa747SAxel Dörfler {
396*a77aa747SAxel Dörfler return kJobInitialized;
397*a77aa747SAxel Dörfler }
398*a77aa747SAxel Dörfler
399*a77aa747SAxel Dörfler
400*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const401*a77aa747SAxel Dörfler JobInitializedLogItem::GetMessage(BString& target) const
402*a77aa747SAxel Dörfler {
403*a77aa747SAxel Dörfler target.SetToFormat("Job \"%s\" initialized.", fJob->Name());
404*a77aa747SAxel Dörfler return B_OK;
405*a77aa747SAxel Dörfler }
406*a77aa747SAxel Dörfler
407*a77aa747SAxel Dörfler
408*a77aa747SAxel Dörfler // #pragma mark - JobIgnoredLogItem
409*a77aa747SAxel Dörfler
410*a77aa747SAxel Dörfler
JobIgnoredLogItem(Job * job,status_t error)411*a77aa747SAxel Dörfler JobIgnoredLogItem::JobIgnoredLogItem(Job* job, status_t error)
412*a77aa747SAxel Dörfler :
413*a77aa747SAxel Dörfler fJobName(job->Name()),
414*a77aa747SAxel Dörfler fError(error)
415*a77aa747SAxel Dörfler {
416*a77aa747SAxel Dörfler }
417*a77aa747SAxel Dörfler
418*a77aa747SAxel Dörfler
~JobIgnoredLogItem()419*a77aa747SAxel Dörfler JobIgnoredLogItem::~JobIgnoredLogItem()
420*a77aa747SAxel Dörfler {
421*a77aa747SAxel Dörfler }
422*a77aa747SAxel Dörfler
423*a77aa747SAxel Dörfler
424*a77aa747SAxel Dörfler LogItemType
Type() const425*a77aa747SAxel Dörfler JobIgnoredLogItem::Type() const
426*a77aa747SAxel Dörfler {
427*a77aa747SAxel Dörfler return kJobIgnored;
428*a77aa747SAxel Dörfler }
429*a77aa747SAxel Dörfler
430*a77aa747SAxel Dörfler
431*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const432*a77aa747SAxel Dörfler JobIgnoredLogItem::GetMessage(BString& target) const
433*a77aa747SAxel Dörfler {
434*a77aa747SAxel Dörfler target.SetToFormat("Ignored job \"%s\" due %s", fJobName.String(),
435*a77aa747SAxel Dörfler strerror(fError));
436*a77aa747SAxel Dörfler return B_OK;
437*a77aa747SAxel Dörfler }
438*a77aa747SAxel Dörfler
439*a77aa747SAxel Dörfler
440*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const441*a77aa747SAxel Dörfler JobIgnoredLogItem::GetParameter(BMessage& parameter) const
442*a77aa747SAxel Dörfler {
443*a77aa747SAxel Dörfler status_t status = parameter.AddString("job", fJobName);
444*a77aa747SAxel Dörfler if (status == B_OK)
445*a77aa747SAxel Dörfler status = parameter.AddInt32("error", fError);
446*a77aa747SAxel Dörfler return status;
447*a77aa747SAxel Dörfler }
448*a77aa747SAxel Dörfler
449*a77aa747SAxel Dörfler
450*a77aa747SAxel Dörfler bool
Matches(const char * jobName,const char * eventName)451*a77aa747SAxel Dörfler JobIgnoredLogItem::Matches(const char* jobName, const char* eventName)
452*a77aa747SAxel Dörfler {
453*a77aa747SAxel Dörfler if (jobName == NULL && eventName == NULL)
454*a77aa747SAxel Dörfler return true;
455*a77aa747SAxel Dörfler
456*a77aa747SAxel Dörfler if (jobName != NULL && fJobName == jobName)
457*a77aa747SAxel Dörfler return true;
458*a77aa747SAxel Dörfler
459*a77aa747SAxel Dörfler return false;
460*a77aa747SAxel Dörfler }
461*a77aa747SAxel Dörfler
462*a77aa747SAxel Dörfler
463*a77aa747SAxel Dörfler // #pragma mark - JobLaunchedLogItem
464*a77aa747SAxel Dörfler
465*a77aa747SAxel Dörfler
JobLaunchedLogItem(Job * job,status_t status)466*a77aa747SAxel Dörfler JobLaunchedLogItem::JobLaunchedLogItem(Job* job, status_t status)
467*a77aa747SAxel Dörfler :
468*a77aa747SAxel Dörfler AbstractJobLogItem(job),
469*a77aa747SAxel Dörfler fStatus(status)
470*a77aa747SAxel Dörfler {
471*a77aa747SAxel Dörfler }
472*a77aa747SAxel Dörfler
473*a77aa747SAxel Dörfler
~JobLaunchedLogItem()474*a77aa747SAxel Dörfler JobLaunchedLogItem::~JobLaunchedLogItem()
475*a77aa747SAxel Dörfler {
476*a77aa747SAxel Dörfler }
477*a77aa747SAxel Dörfler
478*a77aa747SAxel Dörfler
479*a77aa747SAxel Dörfler LogItemType
Type() const480*a77aa747SAxel Dörfler JobLaunchedLogItem::Type() const
481*a77aa747SAxel Dörfler {
482*a77aa747SAxel Dörfler return kJobLaunched;
483*a77aa747SAxel Dörfler }
484*a77aa747SAxel Dörfler
485*a77aa747SAxel Dörfler
486*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const487*a77aa747SAxel Dörfler JobLaunchedLogItem::GetMessage(BString& target) const
488*a77aa747SAxel Dörfler {
489*a77aa747SAxel Dörfler target.SetToFormat("Job \"%s\" launched: %s", fJob->Name(),
490*a77aa747SAxel Dörfler strerror(fStatus));
491*a77aa747SAxel Dörfler return B_OK;
492*a77aa747SAxel Dörfler }
493*a77aa747SAxel Dörfler
494*a77aa747SAxel Dörfler
495*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const496*a77aa747SAxel Dörfler JobLaunchedLogItem::GetParameter(BMessage& parameter) const
497*a77aa747SAxel Dörfler {
498*a77aa747SAxel Dörfler status_t status = AbstractJobLogItem::GetParameter(parameter);
499*a77aa747SAxel Dörfler if (status == B_OK)
500*a77aa747SAxel Dörfler status = parameter.AddInt32("status", fStatus);
501*a77aa747SAxel Dörfler return status;
502*a77aa747SAxel Dörfler }
503*a77aa747SAxel Dörfler
504*a77aa747SAxel Dörfler
505*a77aa747SAxel Dörfler // #pragma mark - JobTerminatedLogItem
506*a77aa747SAxel Dörfler
507*a77aa747SAxel Dörfler
JobTerminatedLogItem(Job * job,status_t status)508*a77aa747SAxel Dörfler JobTerminatedLogItem::JobTerminatedLogItem(Job* job, status_t status)
509*a77aa747SAxel Dörfler :
510*a77aa747SAxel Dörfler AbstractJobLogItem(job),
511*a77aa747SAxel Dörfler fStatus(status)
512*a77aa747SAxel Dörfler {
513*a77aa747SAxel Dörfler }
514*a77aa747SAxel Dörfler
515*a77aa747SAxel Dörfler
~JobTerminatedLogItem()516*a77aa747SAxel Dörfler JobTerminatedLogItem::~JobTerminatedLogItem()
517*a77aa747SAxel Dörfler {
518*a77aa747SAxel Dörfler }
519*a77aa747SAxel Dörfler
520*a77aa747SAxel Dörfler
521*a77aa747SAxel Dörfler LogItemType
Type() const522*a77aa747SAxel Dörfler JobTerminatedLogItem::Type() const
523*a77aa747SAxel Dörfler {
524*a77aa747SAxel Dörfler return kJobTerminated;
525*a77aa747SAxel Dörfler }
526*a77aa747SAxel Dörfler
527*a77aa747SAxel Dörfler
528*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const529*a77aa747SAxel Dörfler JobTerminatedLogItem::GetMessage(BString& target) const
530*a77aa747SAxel Dörfler {
531*a77aa747SAxel Dörfler target.SetToFormat("Job \"%s\" terminated: %s", fJob->Name(),
532*a77aa747SAxel Dörfler strerror(fStatus));
533*a77aa747SAxel Dörfler return B_OK;
534*a77aa747SAxel Dörfler }
535*a77aa747SAxel Dörfler
536*a77aa747SAxel Dörfler
537*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const538*a77aa747SAxel Dörfler JobTerminatedLogItem::GetParameter(BMessage& parameter) const
539*a77aa747SAxel Dörfler {
540*a77aa747SAxel Dörfler status_t status = AbstractJobLogItem::GetParameter(parameter);
541*a77aa747SAxel Dörfler if (status == B_OK)
542*a77aa747SAxel Dörfler status = parameter.AddInt32("status", fStatus);
543*a77aa747SAxel Dörfler return status;
544*a77aa747SAxel Dörfler }
545*a77aa747SAxel Dörfler
546*a77aa747SAxel Dörfler
547*a77aa747SAxel Dörfler // #pragma mark - JobEnabledLogItem
548*a77aa747SAxel Dörfler
549*a77aa747SAxel Dörfler
JobEnabledLogItem(Job * job,bool enabled)550*a77aa747SAxel Dörfler JobEnabledLogItem::JobEnabledLogItem(Job* job, bool enabled)
551*a77aa747SAxel Dörfler :
552*a77aa747SAxel Dörfler AbstractJobLogItem(job),
553*a77aa747SAxel Dörfler fEnabled(enabled)
554*a77aa747SAxel Dörfler {
555*a77aa747SAxel Dörfler }
556*a77aa747SAxel Dörfler
557*a77aa747SAxel Dörfler
~JobEnabledLogItem()558*a77aa747SAxel Dörfler JobEnabledLogItem::~JobEnabledLogItem()
559*a77aa747SAxel Dörfler {
560*a77aa747SAxel Dörfler }
561*a77aa747SAxel Dörfler
562*a77aa747SAxel Dörfler
563*a77aa747SAxel Dörfler LogItemType
Type() const564*a77aa747SAxel Dörfler JobEnabledLogItem::Type() const
565*a77aa747SAxel Dörfler {
566*a77aa747SAxel Dörfler return kJobEnabled;
567*a77aa747SAxel Dörfler }
568*a77aa747SAxel Dörfler
569*a77aa747SAxel Dörfler
570*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const571*a77aa747SAxel Dörfler JobEnabledLogItem::GetMessage(BString& target) const
572*a77aa747SAxel Dörfler {
573*a77aa747SAxel Dörfler target.SetToFormat("Job \"%s\" %sabled", fJob->Name(),
574*a77aa747SAxel Dörfler fEnabled ? "en" : "dis");
575*a77aa747SAxel Dörfler return B_OK;
576*a77aa747SAxel Dörfler }
577*a77aa747SAxel Dörfler
578*a77aa747SAxel Dörfler
579*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const580*a77aa747SAxel Dörfler JobEnabledLogItem::GetParameter(BMessage& parameter) const
581*a77aa747SAxel Dörfler {
582*a77aa747SAxel Dörfler status_t status = AbstractJobLogItem::GetParameter(parameter);
583*a77aa747SAxel Dörfler if (status == B_OK)
584*a77aa747SAxel Dörfler status = parameter.AddBool("enabled", fEnabled);
585*a77aa747SAxel Dörfler return status;
586*a77aa747SAxel Dörfler }
587*a77aa747SAxel Dörfler
588*a77aa747SAxel Dörfler
589*a77aa747SAxel Dörfler // #pragma mark - JobStoppedLogItem
590*a77aa747SAxel Dörfler
591*a77aa747SAxel Dörfler
JobStoppedLogItem(BaseJob * job,bool force)592*a77aa747SAxel Dörfler JobStoppedLogItem::JobStoppedLogItem(BaseJob* job, bool force)
593*a77aa747SAxel Dörfler :
594*a77aa747SAxel Dörfler AbstractJobLogItem(job),
595*a77aa747SAxel Dörfler fForce(force)
596*a77aa747SAxel Dörfler {
597*a77aa747SAxel Dörfler }
598*a77aa747SAxel Dörfler
599*a77aa747SAxel Dörfler
~JobStoppedLogItem()600*a77aa747SAxel Dörfler JobStoppedLogItem::~JobStoppedLogItem()
601*a77aa747SAxel Dörfler {
602*a77aa747SAxel Dörfler }
603*a77aa747SAxel Dörfler
604*a77aa747SAxel Dörfler
605*a77aa747SAxel Dörfler LogItemType
Type() const606*a77aa747SAxel Dörfler JobStoppedLogItem::Type() const
607*a77aa747SAxel Dörfler {
608*a77aa747SAxel Dörfler return kJobStopped;
609*a77aa747SAxel Dörfler }
610*a77aa747SAxel Dörfler
611*a77aa747SAxel Dörfler
612*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const613*a77aa747SAxel Dörfler JobStoppedLogItem::GetMessage(BString& target) const
614*a77aa747SAxel Dörfler {
615*a77aa747SAxel Dörfler target.SetToFormat("Job \"%s\" %sstopped", fJob->Name(),
616*a77aa747SAxel Dörfler fForce ? "force " : "");
617*a77aa747SAxel Dörfler return B_OK;
618*a77aa747SAxel Dörfler }
619*a77aa747SAxel Dörfler
620*a77aa747SAxel Dörfler
621*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const622*a77aa747SAxel Dörfler JobStoppedLogItem::GetParameter(BMessage& parameter) const
623*a77aa747SAxel Dörfler {
624*a77aa747SAxel Dörfler status_t status = AbstractJobLogItem::GetParameter(parameter);
625*a77aa747SAxel Dörfler if (status == B_OK)
626*a77aa747SAxel Dörfler status = parameter.AddBool("force", fForce);
627*a77aa747SAxel Dörfler return status;
628*a77aa747SAxel Dörfler }
629*a77aa747SAxel Dörfler
630*a77aa747SAxel Dörfler
631*a77aa747SAxel Dörfler // #pragma mark - EventLogItem
632*a77aa747SAxel Dörfler
633*a77aa747SAxel Dörfler
EventLogItem(BaseJob * job,Event * event)634*a77aa747SAxel Dörfler EventLogItem::EventLogItem(BaseJob* job, Event* event)
635*a77aa747SAxel Dörfler :
636*a77aa747SAxel Dörfler AbstractJobLogItem(job),
637*a77aa747SAxel Dörfler fEvent(event)
638*a77aa747SAxel Dörfler {
639*a77aa747SAxel Dörfler }
640*a77aa747SAxel Dörfler
641*a77aa747SAxel Dörfler
~EventLogItem()642*a77aa747SAxel Dörfler EventLogItem::~EventLogItem()
643*a77aa747SAxel Dörfler {
644*a77aa747SAxel Dörfler }
645*a77aa747SAxel Dörfler
646*a77aa747SAxel Dörfler
647*a77aa747SAxel Dörfler LogItemType
Type() const648*a77aa747SAxel Dörfler EventLogItem::Type() const
649*a77aa747SAxel Dörfler {
650*a77aa747SAxel Dörfler return kEvent;
651*a77aa747SAxel Dörfler }
652*a77aa747SAxel Dörfler
653*a77aa747SAxel Dörfler
654*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const655*a77aa747SAxel Dörfler EventLogItem::GetMessage(BString& target) const
656*a77aa747SAxel Dörfler {
657*a77aa747SAxel Dörfler target.SetToFormat("Event triggered \"%s\": \"%s\"", fJob->Name(),
658*a77aa747SAxel Dörfler fEvent->ToString().String());
659*a77aa747SAxel Dörfler return B_OK;
660*a77aa747SAxel Dörfler }
661*a77aa747SAxel Dörfler
662*a77aa747SAxel Dörfler
663*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const664*a77aa747SAxel Dörfler EventLogItem::GetParameter(BMessage& parameter) const
665*a77aa747SAxel Dörfler {
666*a77aa747SAxel Dörfler status_t status = AbstractJobLogItem::GetParameter(parameter);
667*a77aa747SAxel Dörfler if (status == B_OK)
668*a77aa747SAxel Dörfler status = parameter.AddString("event", fEvent->ToString());
669*a77aa747SAxel Dörfler return status;
670*a77aa747SAxel Dörfler }
671*a77aa747SAxel Dörfler
672*a77aa747SAxel Dörfler
673*a77aa747SAxel Dörfler bool
Matches(const char * jobName,const char * eventName)674*a77aa747SAxel Dörfler EventLogItem::Matches(const char* jobName, const char* eventName)
675*a77aa747SAxel Dörfler {
676*a77aa747SAxel Dörfler if (eventName != NULL && strstr(fEvent->ToString(), eventName) == NULL)
677*a77aa747SAxel Dörfler return false;
678*a77aa747SAxel Dörfler
679*a77aa747SAxel Dörfler return AbstractJobLogItem::Matches(jobName, NULL);
680*a77aa747SAxel Dörfler }
681*a77aa747SAxel Dörfler
682*a77aa747SAxel Dörfler
683*a77aa747SAxel Dörfler // #pragma mark - ExternalEventLogItem
684*a77aa747SAxel Dörfler
685*a77aa747SAxel Dörfler
AbstractExternalEventLogItem(const char * name)686*a77aa747SAxel Dörfler AbstractExternalEventLogItem::AbstractExternalEventLogItem(const char* name)
687*a77aa747SAxel Dörfler :
688*a77aa747SAxel Dörfler fEventName(name)
689*a77aa747SAxel Dörfler {
690*a77aa747SAxel Dörfler }
691*a77aa747SAxel Dörfler
692*a77aa747SAxel Dörfler
~AbstractExternalEventLogItem()693*a77aa747SAxel Dörfler AbstractExternalEventLogItem::~AbstractExternalEventLogItem()
694*a77aa747SAxel Dörfler {
695*a77aa747SAxel Dörfler }
696*a77aa747SAxel Dörfler
697*a77aa747SAxel Dörfler
698*a77aa747SAxel Dörfler status_t
GetParameter(BMessage & parameter) const699*a77aa747SAxel Dörfler AbstractExternalEventLogItem::GetParameter(BMessage& parameter) const
700*a77aa747SAxel Dörfler {
701*a77aa747SAxel Dörfler return parameter.AddString("event", fEventName);
702*a77aa747SAxel Dörfler }
703*a77aa747SAxel Dörfler
704*a77aa747SAxel Dörfler
705*a77aa747SAxel Dörfler bool
Matches(const char * jobName,const char * eventName)706*a77aa747SAxel Dörfler AbstractExternalEventLogItem::Matches(const char* jobName,
707*a77aa747SAxel Dörfler const char* eventName)
708*a77aa747SAxel Dörfler {
709*a77aa747SAxel Dörfler if (jobName == NULL && eventName == NULL)
710*a77aa747SAxel Dörfler return true;
711*a77aa747SAxel Dörfler
712*a77aa747SAxel Dörfler if (eventName != NULL && strstr(fEventName.String(), eventName) != NULL)
713*a77aa747SAxel Dörfler return true;
714*a77aa747SAxel Dörfler
715*a77aa747SAxel Dörfler return false;
716*a77aa747SAxel Dörfler }
717*a77aa747SAxel Dörfler
718*a77aa747SAxel Dörfler
719*a77aa747SAxel Dörfler // #pragma mark - ExternalEventLogItem
720*a77aa747SAxel Dörfler
721*a77aa747SAxel Dörfler
ExternalEventLogItem(const char * name)722*a77aa747SAxel Dörfler ExternalEventLogItem::ExternalEventLogItem(const char* name)
723*a77aa747SAxel Dörfler :
724*a77aa747SAxel Dörfler AbstractExternalEventLogItem(name)
725*a77aa747SAxel Dörfler {
726*a77aa747SAxel Dörfler }
727*a77aa747SAxel Dörfler
728*a77aa747SAxel Dörfler
~ExternalEventLogItem()729*a77aa747SAxel Dörfler ExternalEventLogItem::~ExternalEventLogItem()
730*a77aa747SAxel Dörfler {
731*a77aa747SAxel Dörfler }
732*a77aa747SAxel Dörfler
733*a77aa747SAxel Dörfler
734*a77aa747SAxel Dörfler LogItemType
Type() const735*a77aa747SAxel Dörfler ExternalEventLogItem::Type() const
736*a77aa747SAxel Dörfler {
737*a77aa747SAxel Dörfler return kExternalEvent;
738*a77aa747SAxel Dörfler }
739*a77aa747SAxel Dörfler
740*a77aa747SAxel Dörfler
741*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const742*a77aa747SAxel Dörfler ExternalEventLogItem::GetMessage(BString& target) const
743*a77aa747SAxel Dörfler {
744*a77aa747SAxel Dörfler target.SetToFormat("External event triggered: \"%s\"",
745*a77aa747SAxel Dörfler fEventName.String());
746*a77aa747SAxel Dörfler return B_OK;
747*a77aa747SAxel Dörfler }
748*a77aa747SAxel Dörfler
749*a77aa747SAxel Dörfler
750*a77aa747SAxel Dörfler // #pragma mark - ExternalEventRegisteredLogItem
751*a77aa747SAxel Dörfler
752*a77aa747SAxel Dörfler
ExternalEventRegisteredLogItem(const char * name)753*a77aa747SAxel Dörfler ExternalEventRegisteredLogItem::ExternalEventRegisteredLogItem(const char* name)
754*a77aa747SAxel Dörfler :
755*a77aa747SAxel Dörfler AbstractExternalEventLogItem(name)
756*a77aa747SAxel Dörfler {
757*a77aa747SAxel Dörfler }
758*a77aa747SAxel Dörfler
759*a77aa747SAxel Dörfler
~ExternalEventRegisteredLogItem()760*a77aa747SAxel Dörfler ExternalEventRegisteredLogItem::~ExternalEventRegisteredLogItem()
761*a77aa747SAxel Dörfler {
762*a77aa747SAxel Dörfler }
763*a77aa747SAxel Dörfler
764*a77aa747SAxel Dörfler
765*a77aa747SAxel Dörfler LogItemType
Type() const766*a77aa747SAxel Dörfler ExternalEventRegisteredLogItem::Type() const
767*a77aa747SAxel Dörfler {
768*a77aa747SAxel Dörfler return kExternalEventRegistered;
769*a77aa747SAxel Dörfler }
770*a77aa747SAxel Dörfler
771*a77aa747SAxel Dörfler
772*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const773*a77aa747SAxel Dörfler ExternalEventRegisteredLogItem::GetMessage(BString& target) const
774*a77aa747SAxel Dörfler {
775*a77aa747SAxel Dörfler target.SetToFormat("External event registered: \"%s\"",
776*a77aa747SAxel Dörfler fEventName.String());
777*a77aa747SAxel Dörfler return B_OK;
778*a77aa747SAxel Dörfler }
779*a77aa747SAxel Dörfler
780*a77aa747SAxel Dörfler
781*a77aa747SAxel Dörfler // #pragma mark - ExternalEventUnregisteredLogItem
782*a77aa747SAxel Dörfler
783*a77aa747SAxel Dörfler
ExternalEventUnregisteredLogItem(const char * name)784*a77aa747SAxel Dörfler ExternalEventUnregisteredLogItem::ExternalEventUnregisteredLogItem(
785*a77aa747SAxel Dörfler const char* name)
786*a77aa747SAxel Dörfler :
787*a77aa747SAxel Dörfler AbstractExternalEventLogItem(name)
788*a77aa747SAxel Dörfler {
789*a77aa747SAxel Dörfler }
790*a77aa747SAxel Dörfler
791*a77aa747SAxel Dörfler
~ExternalEventUnregisteredLogItem()792*a77aa747SAxel Dörfler ExternalEventUnregisteredLogItem::~ExternalEventUnregisteredLogItem()
793*a77aa747SAxel Dörfler {
794*a77aa747SAxel Dörfler }
795*a77aa747SAxel Dörfler
796*a77aa747SAxel Dörfler
797*a77aa747SAxel Dörfler LogItemType
Type() const798*a77aa747SAxel Dörfler ExternalEventUnregisteredLogItem::Type() const
799*a77aa747SAxel Dörfler {
800*a77aa747SAxel Dörfler return kExternalEventUnregistered;
801*a77aa747SAxel Dörfler }
802*a77aa747SAxel Dörfler
803*a77aa747SAxel Dörfler
804*a77aa747SAxel Dörfler status_t
GetMessage(BString & target) const805*a77aa747SAxel Dörfler ExternalEventUnregisteredLogItem::GetMessage(BString& target) const
806*a77aa747SAxel Dörfler {
807*a77aa747SAxel Dörfler target.SetToFormat("External event unregistered: \"%s\"",
808*a77aa747SAxel Dörfler fEventName.String());
809*a77aa747SAxel Dörfler return B_OK;
810*a77aa747SAxel Dörfler }
811