Skip to content

Commit

Permalink
log_systemd: module to provide logging to systemd journal from config…
Browse files Browse the repository at this point in the history
… file
  • Loading branch information
miconda committed Oct 20, 2015
1 parent 974abf6 commit 1498970
Show file tree
Hide file tree
Showing 6 changed files with 370 additions and 0 deletions.
25 changes: 25 additions & 0 deletions modules/log_systemd/Makefile
@@ -0,0 +1,25 @@
#
# WARNING: do not run this directly, it should be run by the master Makefile

include ../../Makefile.defs
auto_gen=
NAME=log_systemd.so

ifeq ($(CROSS_COMPILE),)
SYSTEMD_BUILDER=$(shell \
if pkg-config --exists libsystemd; then \
echo 'pkg-config libsystemd'; \
fi)
endif

ifneq ($(SYSTEMD_BUILDER),)
DEFS += $(shell $(SYSTEMD_BUILDER) --cflags)
LIBS += $(shell $(SYSTEMD_BUILDER) --libs)
else
DEFS += -I$(LOCALBASE)/include
LIBS= -L$(LOCALBASE)/lib -lsystemd
endif

DEFS+=-DKAMAILIO_MOD_INTERFACE

include ../../Makefile.modules
87 changes: 87 additions & 0 deletions modules/log_systemd/README
@@ -0,0 +1,87 @@
LOG_SYSTEMD Module

Daniel-Constantin Mierla

<miconda@gmail.com>

Edited by

Daniel-Constantin Mierla

<miconda@gmail.com>

Copyright © 2015 asipto.com
__________________________________________________________________

Table of Contents

1. Admin Guide

1. Overview
2. Dependencies

2.1. Kamailio Modules
2.2. External Libraries or Applications

3. Functions

3.1. sd_journal_print(level, text)

List of Examples

1.1. sd_journal_print usage

Chapter 1. Admin Guide

Table of Contents

1. Overview
2. Dependencies

2.1. Kamailio Modules
2.2. External Libraries or Applications

3. Functions

3.1. sd_journal_print(level, text)

1. Overview

This module provides logging to systemd journal from configuration
file.

2. Dependencies

2.1. Kamailio Modules
2.2. External Libraries or Applications

2.1. Kamailio Modules

The following modules must be loaded before this module:
* none.

2.2. External Libraries or Applications

The following libraries or applications must be installed before
running Kamailio with this module loaded:
* libsystemd

3. Functions

3.1. sd_journal_print(level, text)

3.1. sd_journal_print(level, text)

Print the text in the systemd journal at the provided level parameter.

Both parameters can contain variables.

For more, see the manual page for function sd_journal_print() in C
library libsystemd.

This function can be used from ANY_ROUTE.

Example 1.1. sd_journal_print usage
...
sd_journal_print("LOG_INFO", "R-URI is $ru\n");
...
4 changes: 4 additions & 0 deletions modules/log_systemd/doc/Makefile
@@ -0,0 +1,4 @@
docs = log_systemd.xml

docbook_dir = ../../../docbook
include $(docbook_dir)/Makefile.module
37 changes: 37 additions & 0 deletions modules/log_systemd/doc/log_systemd.xml
@@ -0,0 +1,37 @@
<?xml version="1.0" encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [

<!-- Include general documentation entities -->
<!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
%docentities;

]>

<book xmlns:xi="http://www.w3.org/2001/XInclude">
<bookinfo>
<title>LOG_SYSTEMD Module</title>
<productname class="trade">sip-router.org</productname>
<authorgroup>
<author>
<firstname>Daniel-Constantin</firstname>
<surname>Mierla</surname>
<email>miconda@gmail.com</email>
</author>
<editor>
<firstname>Daniel-Constantin</firstname>
<surname>Mierla</surname>
<email>miconda@gmail.com</email>
</editor>
</authorgroup>
<copyright>
<year>2015</year>
<holder>asipto.com</holder>
</copyright>
</bookinfo>
<toc></toc>

<xi:include href="log_systemd_admin.xml"/>


</book>
84 changes: 84 additions & 0 deletions modules/log_systemd/doc/log_systemd_admin.xml
@@ -0,0 +1,84 @@
<?xml version="1.0" encoding='ISO-8859-1'?>
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
"http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [

<!-- Include general documentation entities -->
<!ENTITY % docentities SYSTEM "../../../docbook/entities.xml">
%docentities;

]>
<!-- Module User's Guide -->

<chapter>

<title>&adminguide;</title>

<section>
<title>Overview</title>
<para>
This module provides logging to systemd journal from configuration
file.
</para>
</section>

<section>
<title>Dependencies</title>
<section>
<title>&kamailio; Modules</title>
<para>
The following modules must be loaded before this module:
<itemizedlist>
<listitem>
<para>
<emphasis>none</emphasis>.
</para>
</listitem>
</itemizedlist>
</para>
</section>
<section>
<title>External Libraries or Applications</title>
<para>
The following libraries or applications must be installed before running
&kamailio; with this module loaded:
<itemizedlist>
<listitem>
<para>
<emphasis>libsystemd</emphasis>
</para>
</listitem>
</itemizedlist>
</para>
</section>
</section>

<section>
<title>Functions</title>
<section id="log_systemd.f.sd_journal_print">
<title>
<function moreinfo="none">sd_journal_print(level, text)</function>
</title>
<para>
Print the text in the systemd journal at the provided level parameter.
</para>
<para>
Both parameters can contain variables.
</para>
<para>
For more, see the manual page for function sd_journal_print() in C library libsystemd.
</para>
<para>
This function can be used from ANY_ROUTE.
</para>
<example>
<title><function>sd_journal_print</function> usage</title>
<programlisting format="linespecific">
...
sd_journal_print("LOG_INFO", "R-URI is $ru\n");
...
</programlisting>
</example>
</section>
</section>
</chapter>

133 changes: 133 additions & 0 deletions modules/log_systemd/log_systemd_mod.c
@@ -0,0 +1,133 @@
/**
* Copyright (C) 2015 Daniel-Constantin Mierla (asipto.com)
*
* This file is part of Kamailio, a free SIP server.
*
* This file is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version
*
*
* This file is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*
*/

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <systemd/sd-journal.h>

#include "../../sr_module.h"
#include "../../dprint.h"
#include "../../ut.h"
#include "../../mod_fix.h"

MODULE_VERSION

static int mod_init(void);
static int child_init(int);
static void mod_destroy(void);

static int w_sd_journal_print(struct sip_msg* msg, char* lev, char* txt);


static cmd_export_t cmds[]={
{"sd_journal_print", (cmd_function)w_sd_journal_print, 2, fixup_spve_spve,
0, ANY_ROUTE},
{0, 0, 0, 0, 0, 0}
};

static param_export_t params[]={
{0, 0, 0}
};

struct module_exports exports = {
"log_systemd",
DEFAULT_DLFLAGS, /* dlopen flags */
cmds,
params,
0,
0, /* exported MI functions */
0, /* exported pseudo-variables */
0, /* extra processes */
mod_init, /* module initialization function */
0, /* response function */
mod_destroy, /* destroy function */
child_init /* per child init function */
};



/**
* init module function
*/
static int mod_init(void)
{
return 0;
}

/**
* @brief Initialize async module children
*/
static int child_init(int rank)
{
return 0;
}
/**
* destroy module function
*/
static void mod_destroy(void)
{
}

/**
*
*/
static int w_sd_journal_print(struct sip_msg* msg, char* lev, char* txt)
{
str slev;
str stxt;
int ilev;

if(fixup_get_svalue(msg, (gparam_t*)lev, &slev)!=0) {
LM_ERR("unable to get level parameter\n");
return -1;
}

if(fixup_get_svalue(msg, (gparam_t*)txt, &stxt)!=0) {
LM_ERR("unable to get text parameter\n");
return -1;
}

/* one of LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING,
* LOG_NOTICE, LOG_INFO, LOG_DEBUG, as defined in syslog.h, see syslog(3) */
ilev = LOG_DEBUG;
if(slev.len==9 && strncasecmp(slev.s, "LOG_EMERG", slev.len)==0) {
ilev = LOG_EMERG;
} else if(slev.len==9 && strncasecmp(slev.s, "LOG_ALERT", slev.len)==0) {
ilev = LOG_ALERT;
} else if(slev.len==8 && strncasecmp(slev.s, "LOG_CRIT", slev.len)==0) {
ilev = LOG_CRIT;
} else if(slev.len==7 && strncasecmp(slev.s, "LOG_ERR", slev.len)==0) {
ilev = LOG_ERR;
} else if(slev.len==11 && strncasecmp(slev.s, "LOG_WARNING", slev.len)==0) {
ilev = LOG_WARNING;
} else if(slev.len==10 && strncasecmp(slev.s, "LOG_NOTICE", slev.len)==0) {
ilev = LOG_NOTICE;
} else if(slev.len==8 && strncasecmp(slev.s, "LOG_INFO", slev.len)==0) {
ilev = LOG_INFO;
}

sd_journal_print(ilev, "%.*s", stxt.len, stxt.s);

return 1;
}

0 comments on commit 1498970

Please sign in to comment.