new method toJson() in NXSL class Event
authorVictor Kirhenshtein <victor@netxms.org>
Thu, 30 Jun 2016 08:55:48 +0000 (11:55 +0300)
committerVictor Kirhenshtein <victor@netxms.org>
Thu, 30 Jun 2016 08:55:48 +0000 (11:55 +0300)
include/nms_util.h
src/libnetxms/tools.cpp
src/server/core/events.cpp
src/server/core/nxsl_classes.cpp
src/server/include/nms_events.h

index fc749ed..4bef06d 100644 (file)
@@ -1995,6 +1995,8 @@ int LIBNETXMS_EXPORTABLE XMLGetAttrInt(const char **attrs, const char *name, int
 UINT32 LIBNETXMS_EXPORTABLE XMLGetAttrUINT32(const char **attrs, const char *name, UINT32 defVal);
 bool LIBNETXMS_EXPORTABLE XMLGetAttrBoolean(const char **attrs, const char *name, bool defVal);
 
+String LIBNETXMS_EXPORTABLE EscapeStringForJSON(const TCHAR *s);
+
 #if !defined(_WIN32) && !defined(_NETWARE) && defined(NMS_THREADS_H_INCLUDED)
 void LIBNETXMS_EXPORTABLE StartMainLoop(ThreadFunction pfSignalHandler, ThreadFunction pfMain);
 #endif
index 8e9f15b..441b623 100644 (file)
@@ -2734,3 +2734,20 @@ TCHAR LIBNETXMS_EXPORTABLE *GetHeapInfo()
 AbstractIterator::~AbstractIterator()
 {
 }
+
+/**
+ * Escape string for JSON
+ */
+String LIBNETXMS_EXPORTABLE EscapeStringForJSON(const TCHAR *s)
+{
+   String js;
+   if (s == NULL)
+      return js;
+   for(const TCHAR *p = s; *p != 0; p++)
+   {
+      if (*p == _T('"') || *p == _T('\\'))
+         js.append(_T('\\'));
+      js.append(*p);
+   }
+   return js;
+}
index 52f68d6..cb9963e 100644 (file)
@@ -700,6 +700,50 @@ void Event::prepareMessage(NXCPMessage *msg) const
        msg->setField(id++, m_dciId);
 }
 
+/**
+ * Create JSON object
+ */
+String Event::createJson()
+{
+   TCHAR buffer[64];
+
+   String json = _T("{ \"id\":");
+   json.append(m_id);
+   json.append(_T(", \"code\":"));
+   json.append(m_code);
+   if (EventNameFromCode(m_code, buffer))
+   {
+      json.append(_T(", \"name\":\""));
+      json.append(EscapeStringForJSON(buffer));
+      json.append(_T('"'));
+   }
+   json.append(_T(", \"timestamp\":"));
+   json.append((INT64)m_timeStamp);
+   json.append(_T(", \"source\":"));
+   json.append(m_sourceId);
+   json.append(_T(", \"dci\":"));
+   json.append(m_dciId);
+   json.append(_T(", \"severity\":"));
+   json.append(m_severity);
+   json.append(_T(", \"tag\":\""));
+   json.append(EscapeStringForJSON(m_userTag));
+   json.append(_T("\", \"message\":\""));
+   json.append(EscapeStringForJSON(m_messageText));
+   json.append(_T("\", \"parameters\":["));
+   for(int i = 0; i < m_parameters.size(); i++)
+   {
+      if (i > 0)
+         json.append(_T(','));
+      json.append(_T(" { \"name\":\""));
+      json.append(EscapeStringForJSON(m_parameterNames.get(i)));
+      json.append(_T("\", \"value\":\""));
+      json.append(EscapeStringForJSON((TCHAR *)m_parameters.get(i)));
+      json.append(_T("\" }"));
+   }
+   json.append(_T(" ] }"));
+   return json;
+}
+
 /**
  * Load event configuration from database
  */
index 604f0eb..18c7c8b 100644 (file)
@@ -879,6 +879,16 @@ NXSL_METHOD_DEFINITION(Event, setUserTag)
    return 0;
 }
 
+/**
+ * Event::toJson() method
+ */
+NXSL_METHOD_DEFINITION(Event, toJson)
+{
+   Event *event = (Event *)object->getData();
+   *result = new NXSL_Value(event->createJson());
+   return 0;
+}
+
 /**
  * NXSL class Event: constructor
  */
@@ -889,6 +899,7 @@ NXSL_EventClass::NXSL_EventClass() : NXSL_Class()
    NXSL_REGISTER_METHOD(Event, setMessage, 1);
    NXSL_REGISTER_METHOD(Event, setSeverity, 1);
    NXSL_REGISTER_METHOD(Event, setUserTag, 1);
+   NXSL_REGISTER_METHOD(Event, toJson, 0);
 }
 
 /**
index 08eae08..f36fb80 100644 (file)
@@ -129,6 +129,8 @@ public:
 
    const TCHAR *getCustomMessage() const { return CHECK_NULL_EX(m_customMessage); }
    void setCustomMessage(const TCHAR *message) { free(m_customMessage); m_customMessage = _tcsdup_ex(message); }
+
+   String createJson();
 };
 
 /**