Remoto - VFS: VFS_logger Class Reference
Remoto - VFS

A logger node with color formatting and different channels for message types. More...

#include <VFS_logger.h>

Inheritance diagram for VFS_logger:
VFS_node

Public Member Functions

Q_INVOKABLE VFS_logger (int logLevel, int logTime, QString adminAddress)
 VFS_logger constructor. More...
 
 ~VFS_logger ()
 
virtual VFS_nodefind (VFS_request *r)
 This method will return this if the path is settings, otherwise VFS_node::find(). More...
 
- Public Member Functions inherited from VFS_node
Q_INVOKABLE VFS_node ()
 The VFS_node constructor will add its instance to the VFS_node::__allNodes global node registry, observing thread safety rules. More...
 
virtual ~VFS_node ()
 VFS_node destructor. More...
 
virtual VFS_nodeappend (QString name, VFS_node *node, bool containerCheck=true, QString user="server")
 Append a VFS_node as a child of this node. More...
 
QString className ()
 Return the class name of a node. More...
 
virtual VFS_requestcreateRequest (VFS_request::requestType type, QString path, QString user="unknown", QJsonDocument data=QJsonDocument(), QJsonObject metadata=QJsonObject(), bool dontDelete=false)
 Create a new VFS_request with this object as _origin. More...
 
VFS_nodefind (QString path)
 Find a node by string path. More...
 
VFS_nodefindChildWithName (QString name)
 Check if a child with a given name exists. More...
 
virtual bool isContainer ()
 A VFS_node may have children. More...
 
virtual VFS_nodemount ()
 Mount this node. More...
 
virtual QString reportDetails ()
 Additional details for a generated report. More...
 
QString uniqueChildName (QString name)
 Generate a unique child name. More...
 
virtual VFS_nodeunmount ()
 Unmount this node. More...
 
virtual bool validChildName (QString name)
 Check if a node name is valid. More...
 

Protected Slots

virtual void applyDiff (VFS_request *t)
 Receive log information from a logging mechanism. More...
 

Protected Member Functions

virtual void submit (VFS_request *r)
 Submit settings to this logger. More...
 
- Protected Member Functions inherited from VFS_node
virtual void aclDefaults (VFS_request *r)
 Return default values and features associated wth this node. More...
 
void addACLDefault (QJsonObject &acl, bool value, QString description="")
 Add a default value to the acl object. More...
 
void addACLFeature (QJsonObject &acl, QString feature, bool value, QString description="")
 Add a feature to the acl object. More...
 
void addACLFeatureGroup (QJsonObject &acl, QString feature, QString group, bool value)
 Add a feature group to the acl object. More...
 
void addACLFeatureUser (QJsonObject &acl, QString feature, QString user, bool value)
 Add a feature user to the acl object. More...
 
void addACLGroup (QJsonObject &acl, QString group, bool value)
 Add a group to the acl object. More...
 
void addACLUser (QJsonObject &acl, QString user, bool value)
 Add a user to the acl object. More...
 
virtual QByteArray icon ()
 Fetch the icon for a node. More...
 
virtual void issueRequest (VFS_node *target, VFS_request *t)
 Issue a VFS_request to its target. More...
 
virtual void issueRequest (VFS_request *t)
 A convenience function. More...
 
virtual void issueResponse (VFS_request *t)
 Once a request has been completed, issue a response. More...
 
virtual void ls (VFS_request *r)
 List the contents of this node. More...
 
virtual void metadata (VFS_request *r)
 Fetch the metadata of this node. More...
 
virtual void read (VFS_request *r)
 Return the data contents of this node, or if it's a container call ls() More...
 
virtual void releaseLock (VFS_request *r)
 Release a lock on this node. More...
 
virtual void report (VFS_request *r)
 Report debugging information about the current state of this node. More...
 
virtual void requestLock (VFS_request *r)
 Request a lock on this node. More...
 
virtual void rm (VFS_request *r)
 Remove a child entry from a node, or the node itself. More...
 
virtual void subscribe (VFS_request *r)
 Add an entry to this node's _subscription list. More...
 
virtual void unsubscribe (VFS_request *r)
 Remove an entry from this node's _subscription list. More...
 
virtual void unsubscribePath (QString path)
 Unsubscribe all references to a subpath. More...
 
virtual void write (VFS_request *r)
 Write data to this node. More...
 

Protected Attributes

VFS_node_critical
 Crash may be imminent, the administrator address will be emailed this message if it is possible. More...
 
VFS_node_errors
 Error logs, which mean there is a problem but not a crash. More...
 
VFS_node_log
 Message collector node, which subscribes to the other nodes as an aggregator. More...
 
VFS_node_messages
 A message logging node. More...
 
VFS_node_warnings
 Warning logs, which provide non-critical information. More...
 
- Protected Attributes inherited from VFS_node
VFS_children _children
 This node's children. More...
 
QMutex _lock
 A recursive mutex that is local to this node. More...
 
VFS_subscriptionType _subscribers
 This node's subscribers. These subscribers will receive diff notifications. More...
 

Private Member Functions

void email (QString address, QString subject, QString message)
 Email an administrator about a problem. More...
 

Private Attributes

QString _adminEmail
 For CRITICAL() messages, this is the address that will be emailed. More...
 
int _logLevel
 Filter log entries by this value... lower entries are very important, higher ones are more fine-grained. More...
 
int _logTime
 Include log entry time, where 0 = none, 1 = locale time, 2 = locale time and date, 3 = UTC time date and offset. More...
 
ColorPrint cp_bold
 Color settings for bold printing. More...
 
ColorPrint cp_error
 Color settings for error messages. More...
 
ColorPrint cp_warn
 Color settings for warning messages. More...
 

Additional Inherited Members

- Public Slots inherited from VFS_node
virtual void applyDiff (VFS_request *r)
 Apply a diff received via subscription. More...
 
virtual void executeRequest (VFS_request *t)
 Based on the VFS_request::requestType, execute the function associated with an operation. More...
 
void notifySubscribers (VFS_node *origin, VFS_request *t)
 Propagate a diff to subscribers. More...
 
virtual void receiveResponse (VFS_request *t)
 Once a VFS_request has been completed, a response will be issued back to its _origin. More...
 
void remove (bool andDelete)
 Remove a child node. More...
 
virtual void remove (VFS_node *node=nullptr, QString *name=nullptr, QString user="server")
 Remove a child node from this node. More...
 
virtual void subtreeRequest (VFS_request *t)
 find() the target of a VFS_request, and execute the request More...
 
virtual void unsubscribeAll (VFS_node *n)
 Remove all references to a subscriber from this node. More...
 
- Signals inherited from VFS_node
void diff (VFS_node *origin, VFS_request *t)
 Emit a diff, which will trigger notifySubscribers() for a mounted node. More...
 
void finished (bool andDelete=false)
 Emitted if a thread fails to create its node, or a node is rm()'d, or any other reason a node has completed its lifecycle. It is deleted if andDelete==true. More...
 
void mounted ()
 Emitted when a node is mount()ed. More...
 
void unmounted (VFS_node *self)
 Emitted when a node is unmount()ed. More...
 
- Static Public Member Functions inherited from VFS_node
static bool __isNode (VFS_node *)
 Check to see if a node is in the global registry. More...
 
static QString code (QString nodename, QString libname, QString &error)
 Fetch code or any other resource from a node. More...
 

Detailed Description

A logger node with color formatting and different channels for message types.

Messages will be aggregated on the general "logs" path. This node will also provide "messages", "errors", "warnings", and "critical" as VFS paths.

See also
VFS_logview

Definition at line 8 of file VFS_logger.h.

Constructor & Destructor Documentation

◆ VFS_logger()

VFS_logger::VFS_logger ( int  logLevel,
int  logTime,
QString  adminEmail 
)
explicit

VFS_logger constructor.

Parameters
logLevel
logTime
adminEmailThis will primarily be used with VFS_creator from VFS, so the parameters will generally be empty and will need to be set later using a submit.

Definition at line 33 of file VFS_logger.cpp.

◆ ~VFS_logger()

VFS_logger::~VFS_logger ( )

Definition at line 61 of file VFS_logger.cpp.

Member Function Documentation

◆ applyDiff

void VFS_logger::applyDiff ( VFS_request t)
protectedvirtualslot

Receive log information from a logging mechanism.

Parameters
tThe VFS_request object

The VFS constructor subscribes to logging channels to listen for output. It will not filter what it chooses to emit to other listeners. The specified log level will be printed to stdout and stderr, but all messages will be sent to subscribers, for instance an end user.

LogLevel is filtered on a 0-9 scale, where 0 will always be shown, and anything >= logLevel will be output to stdout.

The output format is:

TIME [ CHANNEL LEVEL ] USER MESSAGE

Where:

  • TIME is optional based on the logTime setting.
  • CHANNEL is LOG | WARN | ERROR | CRITICAL
  • LEVEL is 0-9, except for CRITICAL, which has no meaningful level.
  • USER is an arbitrary string, which may correspond to a user or a class or other identifier.
  • MESSAGE is any arbitrary string of output.

ERROR and CRITICAL are sent to stderr, while all others are sent to stdout.

The design is meant to be easily greppable, filterable, and parseable, while having colors that facilitate quick identification for warnings and errors.

If a logTime setting is provided, the VFS will prepend a time string to each line of output.

Log Time:

  • 0 no time is reported (default if not provided)
  • 1 Time string in the locale of the server
  • 2 Time and date string in the locale of the server, including timezone abbreviation
  • 3 Time and date in UTC format with a GMT offset.
  • 4 Milliseconds since epoch

Users who wish to receive logging information can subscribe to:

  • /logs/log - all logs aggregated
  • /logs/messages - informational messages only
  • /logs/warnings - warning messages
  • /logs/errors - error messages
  • /logs/critical - critical messages that need attention from an administrator
See also
VFS_creator::constructConfig()
VFS_creator::resolveEnvValue()

Definition at line 192 of file VFS_logger.cpp.

◆ email()

void VFS_logger::email ( QString  address,
QString  subject,
QString  message 
)
private

Email an administrator about a problem.

Parameters
addressThe administrator email address list, separated by spaces, as accepted by the mail unix command.
subjectThe email subject
messageThe email message
Note
This is a private function that is only called when CRITICAL() requests are received.

Definition at line 266 of file VFS_logger.cpp.

◆ find()

VFS_node * VFS_logger::find ( VFS_request r)
virtual

This method will return this if the path is settings, otherwise VFS_node::find().

Parameters
rThe VFS_request object
Returns
this, or the result of VFS_node::find()

Reimplemented from VFS_node.

Definition at line 72 of file VFS_logger.cpp.

◆ submit()

void VFS_logger::submit ( VFS_request r)
protectedvirtual

Submit settings to this logger.

Parameters
rThe VFS_request object

The only _path accepted here is settings, and the only useful values allowed are:

  • logLevel (0-9)
  • logTime (0-3)
  • adminEmail (email string)

Reimplemented from VFS_node.

Definition at line 90 of file VFS_logger.cpp.

Member Data Documentation

◆ _adminEmail

QString VFS_logger::_adminEmail
private

For CRITICAL() messages, this is the address that will be emailed.

Definition at line 30 of file VFS_logger.h.

◆ _critical

VFS_node* VFS_logger::_critical
protected

Crash may be imminent, the administrator address will be emailed this message if it is possible.

Definition at line 23 of file VFS_logger.h.

◆ _errors

VFS_node* VFS_logger::_errors
protected

Error logs, which mean there is a problem but not a crash.

Definition at line 22 of file VFS_logger.h.

◆ _log

VFS_node* VFS_logger::_log
protected

Message collector node, which subscribes to the other nodes as an aggregator.

Definition at line 19 of file VFS_logger.h.

◆ _logLevel

int VFS_logger::_logLevel
private

Filter log entries by this value... lower entries are very important, higher ones are more fine-grained.

Definition at line 28 of file VFS_logger.h.

◆ _logTime

int VFS_logger::_logTime
private

Include log entry time, where 0 = none, 1 = locale time, 2 = locale time and date, 3 = UTC time date and offset.

Definition at line 29 of file VFS_logger.h.

◆ _messages

VFS_node* VFS_logger::_messages
protected

A message logging node.

Definition at line 20 of file VFS_logger.h.

◆ _warnings

VFS_node* VFS_logger::_warnings
protected

Warning logs, which provide non-critical information.

Definition at line 21 of file VFS_logger.h.

◆ cp_bold

ColorPrint VFS_logger::cp_bold
private

Color settings for bold printing.

Definition at line 32 of file VFS_logger.h.

◆ cp_error

ColorPrint VFS_logger::cp_error
private

Color settings for error messages.

Definition at line 34 of file VFS_logger.h.

◆ cp_warn

ColorPrint VFS_logger::cp_warn
private

Color settings for warning messages.

Definition at line 33 of file VFS_logger.h.


The documentation for this class was generated from the following files: