Initial VES for DANOS vRouter
[demo.git] / vnfs / VESreporting_vFW5.0_DANOS / evel / evel-library / code / evel_library / evel_logging.c
diff --git a/vnfs/VESreporting_vFW5.0_DANOS/evel/evel-library/code/evel_library/evel_logging.c b/vnfs/VESreporting_vFW5.0_DANOS/evel/evel-library/code/evel_library/evel_logging.c
new file mode 100644 (file)
index 0000000..cb07396
--- /dev/null
@@ -0,0 +1,168 @@
+/*************************************************************************//**
+ *
+ * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * Unless otherwise specified, all software contained herein is
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *        http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and 
+ * limitations under the License.
+ * ECOMP is a trademark and service mark of AT&T Intellectual Property.
+ ****************************************************************************/
+/**************************************************************************//**
+ * @file
+ * Wrapper for event logging built on syslog.
+ *
+ ****************************************************************************/
+
+#include <string.h>
+#include <assert.h>
+#include <syslog.h>
+#include <stdlib.h>
+#include <sys/time.h>
+
+#include <curl/curl.h>
+
+#include "evel.h"
+
+
+/*****************************************************************************/
+/* Debug settings.  Logging is done through macros so these need to be       */
+/* externally visible.                                                       */
+/*****************************************************************************/
+EVEL_LOG_LEVELS debug_level = EVEL_LOG_DEBUG;
+//static char *syslog_ident = "evel";
+int debug_indent = 0;
+
+/*****************************************************************************/
+/* Buffers for error strings from this library.                              */
+/*****************************************************************************/
+static char evel_err_string[EVEL_MAX_ERROR_STRING_LEN] = "<NULL>";
+
+
+/**************************************************************************//**
+ * Initialize logging
+ *
+ * @param[in] level  The debugging level - one of ::EVEL_LOG_LEVELS.
+ * @param[in] ident  The identifier for our logs.
+ *****************************************************************************/
+void log_initialize(EVEL_LOG_LEVELS level, const char * ident)
+{
+  assert(level < EVEL_LOG_MAX);
+  assert(ident != NULL);
+
+  debug_level = level;
+  openlog(ident, LOG_PID, LOG_USER);
+}
+
+/**************************************************************************//**
+ * Descriptive text for library errors.
+ *
+ * Return a text error string that relates to the last failure.  May be
+ * "<null>" but will never be NULL.
+ *
+ * @returns   Text error string.
+ *
+ * @note      Must not be freed!
+ *****************************************************************************/
+const char * evel_error_string(void)
+{
+  return(evel_err_string);
+}
+
+/***************************************************************************//*
+ * Store the formatted string into the static error string and log the error.
+ *
+ * @param format  Error string in standard printf format.
+ * @param ...     Variable parameters to be substituted into the format string.
+ *****************************************************************************/
+void log_error_state(char * format, ...)
+{
+  va_list largs;
+
+  assert(format != NULL);
+  va_start(largs, format);
+  vsnprintf(evel_err_string, EVEL_MAX_ERROR_STRING_LEN, format, largs);
+  va_end(largs);
+  EVEL_ERROR("%s", evel_err_string);
+}
+
+
+/**************************************************************************//**
+ *  Generate a debug log.
+ *
+ *  Provides an interface to syslog with formatting of the nesting level
+ *  so that it's easier to see function entry/exit.
+ *
+ *  @param[in]  level   The debug level - see ::EVEL_LOG_LEVELS.
+ *  @param[in]  format  The output formatting in printf style.
+ *  @param[in]  ...     Variable arguments as specified in the format string.
+ *****************************************************************************/
+void log_debug(EVEL_LOG_LEVELS level, char * format, ...)
+{
+  va_list largs;
+  int priority;
+  char indent_fmt[1024];
+  char *syslog_fmt = NULL;
+
+  /***************************************************************************/
+  /* Test assumptions.                                                       */
+  /***************************************************************************/
+  assert(format != NULL);
+  assert(level <= EVEL_LOG_MAX);
+
+  if (level >= debug_level)
+  {
+    if ((debug_level == EVEL_LOG_INFO) || (debug_indent == 0))
+    {
+      /***********************************************************************/
+      /* Just use the format as is.                                          */
+      /***********************************************************************/
+      syslog_fmt = format;
+    }
+    else
+    {
+      /***********************************************************************/
+      /* Combine the format with a preceding number of indent markers.       */
+      /***********************************************************************/
+      sprintf(indent_fmt, "%.*s%s",
+              debug_indent,
+              INDENT_SEPARATORS,
+              format);
+      syslog_fmt = indent_fmt;
+    }
+
+    /*************************************************************************/
+    /* Work out the syslog priority value.                                   */
+    /*************************************************************************/
+    switch (level)
+    {
+    case EVEL_LOG_ERROR:
+      priority = LOG_ERR;
+      break;
+
+    case EVEL_LOG_INFO:
+      priority = LOG_INFO;
+      break;
+
+    case EVEL_LOG_DEBUG:
+    case EVEL_LOG_SPAMMY:
+    default:
+      priority = LOG_DEBUG;
+      break;
+    }
+
+    /*************************************************************************/
+    /* Write the log to the file next, which requires the var args list.     */
+    /*************************************************************************/
+    va_start(largs, format);
+    vsyslog(priority, syslog_fmt, largs);
+    va_end(largs);
+  }
+}