* Copyright 2017-2018, Axel DΓΆrfler, axeld@pinc-software.de.
* Distributed under the terms of the MIT License.
*/
#ifndef LOG_H
#define LOG_H
#include <String.h>
#include <locks.h>
#include <util/DoublyLinkedList.h>
class BMessage;
class BaseJob;
class Event;
class Job;
enum LogItemType {
kJobInitialized,
kJobIgnored,
kJobSkipped,
kJobLaunched,
kJobTerminated,
kJobEnabled,
kJobStopped,
kEvent,
kExternalEvent,
kExternalEventRegistered,
kExternalEventUnregistered,
};
class LogItem : public DoublyLinkedListLinkImpl<LogItem> {
public:
public:
LogItem();
virtual ~LogItem();
bigtime_t When()
{ return fWhen; }
BString Message() const;
virtual LogItemType Type() const = 0;
virtual status_t GetMessage(BString& target) const = 0;
virtual status_t GetParameter(BMessage& parameter) const = 0;
virtual bool Matches(const char* jobName,
const char* eventName) = 0;
private:
bigtime_t fWhen;
};
typedef DoublyLinkedList<LogItem> LogItemList;
class Log {
public:
Log();
void Add(LogItem* item);
LogItemList::Iterator
Iterator()
{ return fItems.GetIterator(); }
mutex& Lock()
{ return fLock; }
void JobInitialized(Job* job);
void JobIgnored(Job* job, status_t status);
void JobSkipped(Job* job);
void JobLaunched(Job* job, status_t status);
void JobTerminated(Job* job, status_t status);
void JobEnabled(Job* job, bool enabled);
void JobStopped(BaseJob* job, bool force);
void EventTriggered(BaseJob* job, Event* event);
void ExternalEventTriggered(const char* name);
void ExternalEventRegistered(const char* name);
void ExternalEventUnregistered(const char* name);
private:
mutex fLock;
LogItemList fItems;
size_t fCount;
};
#endif