Browse Source

[New feature][Modularization][Modify_EventLogging]

2020.09.09 / Folus Wen

Actions:
1. EVSE/Modularization/Module_EventLogging.c write status code to sqlite database and keep latest 2000 records.

Files:
1. As follow commit history

Image version: D0.00.XX.XXXX.XX
Image checksum: XXXXXXXX

Hardware PWB P/N : XXXXXXX
Hardware Version : XXXXXXX
FolusWen 4 years ago
parent
commit
2010a7ebcd
2 changed files with 115 additions and 15 deletions
  1. 2 2
      EVSE/Modularization/Makefile
  2. 113 13
      EVSE/Modularization/Module_EventLogging.c

+ 2 - 2
EVSE/Modularization/Makefile

@@ -83,8 +83,8 @@ Module_UpgradeLib:
 
 Module_EventLogging:
 	rm -f Module_EventLogging
-	$(CC) -D $(Project) -I ../Projects -O0 -g3 -Wall -c -fmessage-length=0 -o Module_EventLogging.o Module_EventLogging.c
-	$(CC) -o Module_EventLogging Module_EventLogging.o
+	$(CC) -D $(Project) -I ../Projects -I ./ocppfiles -O0 -g3 -Wall -c -fmessage-length=0 -o Module_EventLogging.o Module_EventLogging.c
+	$(CC) -L ./ocppfiles -lsqlite3 -o Module_EventLogging Module_EventLogging.o
 	rm -f Module_EventLogging.o
 	mv -f Module_EventLogging ../rootfs/root
 

+ 113 - 13
EVSE/Modularization/Module_EventLogging.c

@@ -26,6 +26,7 @@
 #include	<time.h>
 #include	<ctype.h>
 #include 	<ifaddrs.h>
+#include	<sqlite3.h>
 #include	"define.h"
 
 #define DEBUG_INFO(format, args...) StoreLogMsg("[%s:%d][%s][Info] "format, __FILE__, __LINE__, __FUNCTION__, ##args)
@@ -38,23 +39,25 @@
 #define ARRAY_SIZE(A)		(sizeof(A) / sizeof(A[0]))
 #define PASS				1
 #define FAIL				-1
+#define DB_FILE							"/Storage/EventLog/Eventlog.db"
 
 struct SysConfigAndInfo			*ShmSysConfigAndInfo;
 struct StatusCodeData 			*ShmStatusCodeData;
 
+sqlite3 *localDb;
+
 void trim(char *s);
 int mystrcmp(char *p1,char *p2);
 void substr(char *dest, const char* src, unsigned int start, unsigned int cnt);
 void split(char **arr, char *str, const char *del);
 
-
-#ifdef SystemLogMessage
 int StoreLogMsg(const char *fmt, ...)
 {
 	char Buf[4096+256];
 	char buffer[4096];
 	time_t CurrentTime;
 	struct tm *tm;
+	struct timeval tv;
 	va_list args;
 
 	va_start(args, fmt);
@@ -64,19 +67,22 @@ int StoreLogMsg(const char *fmt, ...)
 	memset(Buf,0,sizeof(Buf));
 	CurrentTime = time(NULL);
 	tm=localtime(&CurrentTime);
-	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/Eventlog/[%04d.%02d]EventLog",
-			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
+	gettimeofday(&tv, NULL); // get microseconds, 10^-6
+
+	sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/Eventlog/[%04d.%02d]EventLog",
+			tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
 			buffer,
 			tm->tm_year+1900,tm->tm_mon+1);
 #ifdef SystemLogMessage
 	system(Buf);
 #endif
 
-	printf("[%04d.%02d.%02d %02d:%02d:%02d] - %s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, buffer);
+#ifdef ConsloePrintLog
+	printf("[%04d.%02d.%02d %02d:%02d:%02d.%06ld %s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec, buffer);
+#endif
 
 	return rc;
 }
-#endif
 
 int StoreEventLogMsg(const char *fmt, ...)
 {
@@ -84,6 +90,7 @@ int StoreEventLogMsg(const char *fmt, ...)
 	char buffer[4096];
 	time_t CurrentTime;
 	struct tm *tm;
+	struct timeval tv;
 	va_list args;
 
 	va_start(args, fmt);
@@ -93,11 +100,12 @@ int StoreEventLogMsg(const char *fmt, ...)
 	memset(Buf,0,sizeof(Buf));
 	CurrentTime = time(NULL);
 	tm=localtime(&CurrentTime);
+	gettimeofday(&tv, NULL); // get microseconds, 10^-6
 
 	if((ShmSysConfigAndInfo->SysConfig.ModelName != NULL) && (ShmSysConfigAndInfo->SysConfig.SerialNumber != NULL) && (strlen((char*)ShmSysConfigAndInfo->SysConfig.ModelName) >= 14))
 	{
-		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/EventLog/[%04d.%02d]%s_%s_EventLog",
-					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/EventLog/[%04d.%02d]%s_%s_EventLog",
+					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1,
 					ShmSysConfigAndInfo->SysConfig.ModelName,
@@ -105,8 +113,8 @@ int StoreEventLogMsg(const char *fmt, ...)
 	}
 	else
 	{
-		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d] - %s\" >> /Storage/EventLog/[%04d.%02d]EventLog",
-					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,
+		sprintf(Buf,"echo -n \"[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s\" >> /Storage/EventLog/[%04d.%02d]EventLog",
+					tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec,
 					buffer,
 					tm->tm_year+1900,tm->tm_mon+1);
 	}
@@ -116,7 +124,7 @@ int StoreEventLogMsg(const char *fmt, ...)
 #endif
 
 #ifdef ConsloePrintLog
-	printf("[%04d.%02d.%02d %02d:%02d:%02d] - %s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec, buffer);
+	printf("[%04d.%02d.%02d %02d:%02d:%02d.%06ld]%s", tm->tm_year+1900,tm->tm_mon+1,tm->tm_mday,tm->tm_hour,tm->tm_min,tm->tm_sec,tv.tv_usec, buffer);
 #endif
 
 	return rc;
@@ -132,9 +140,9 @@ int DiffTimeb(struct timeb ST, struct timeb ET)
 	return (StopTime-StartTime)*1000+ET.millitm-ST.millitm;
 }
 
-//=================================
+//==========================================
 // Common routine
-//=================================
+//==========================================
 void trim(char *s)
 {
     int i=0, j, k, l=0;
@@ -297,6 +305,90 @@ int InitShareMemory()
     return result;
 }
 
+//==========================================
+// SQLite routne
+//==========================================
+int DB_Open(sqlite3 *db)
+{
+	int result = PASS;
+	char* errMsg = NULL;
+	char* createRecordSql="CREATE TABLE IF NOT EXISTS event_record("
+					      "idx integer primary key AUTOINCREMENT, "
+						  "occurDatetime text NOT NULL, "
+						  "statusCode text NOT NULL"
+						  ");";
+
+	//sqlite3_config(SQLITE_CONFIG_URI, 1);
+	if(sqlite3_open(DB_FILE, &db))
+	{
+		result = FAIL;
+		DEBUG_ERROR( "Can't open database: %s\n", sqlite3_errmsg(db));
+		sqlite3_close(db);
+	}
+	else
+	{
+		DEBUG_INFO( "Local event record database open successfully.\n");
+
+		if (sqlite3_exec(db, createRecordSql, 0, 0, &errMsg) != SQLITE_OK)
+		{
+			result = FAIL;
+			DEBUG_ERROR( "Create local event record table error message: %s\n", errMsg);
+		}
+		else
+		{
+			DEBUG_INFO( "Opened local event record table successfully\n");
+		}
+
+		sqlite3_close(db);
+	}
+
+	return result;
+}
+
+int DB_Insert_Record(sqlite3 *db, uint8_t *statusCode)
+{
+	int result = PASS;
+	char* errMsg = NULL;
+	char sqlStr[1024];
+
+	sprintf(sqlStr, "insert into event_record(occurDatetime, statusCode) values(CURRENT_TIMESTAMP, '%s');", statusCode);
+
+	if(sqlite3_open(DB_FILE, &db))
+	{
+		result = FAIL;
+		DEBUG_INFO( "Can't open database: %s\n", sqlite3_errmsg(db));
+		sqlite3_close(db);
+	}
+	else
+	{
+		DEBUG_INFO( "Local event record database open successfully.\n");
+		if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
+		{
+			result = FAIL;
+			DEBUG_INFO( "Insert local event record error message: %s\n", errMsg);
+		}
+		else
+		{
+			DEBUG_INFO( "Insert local event record successfully\n");
+		}
+
+		sprintf(sqlStr, "delete from event_record where idx < (select idx from event_record order by idx desc limit 1)-2000;");
+		if (sqlite3_exec(db, sqlStr, 0, 0, &errMsg) != SQLITE_OK)
+		{
+			result = FAIL;
+			DEBUG_INFO( "delete local event_record error message: %s\n", errMsg);
+		}
+		else
+		{
+			DEBUG_INFO( "delete local event record successfully\n");
+		}
+
+		sqlite3_close(db);
+	}
+
+	return result;
+}
+
 //================================================
 // Main process
 //================================================
@@ -318,6 +410,11 @@ int main(void)
 		return 0;
 	}
 
+	if(DB_Open(localDb) != PASS)
+	{
+		DEBUG_ERROR("Local database initial fail.\n");
+	}
+
 	for(;;)
 	{
 		//check Fault Status
@@ -347,6 +444,7 @@ int main(void)
 						}
 
 						EVENT_INFO("%s\n", EventCodeTmp);
+						DB_Insert_Record(localDb, EventCodeTmp);
 					}
 				}
 			}
@@ -378,6 +476,7 @@ int main(void)
 							AddFaultCodeToBuf(EventCodeDisp);
 						}
 						EVENT_INFO("%s\n", EventCodeTmp);
+						DB_Insert_Record(localDb, EventCodeTmp);
 					}
 				}
 			}
@@ -409,6 +508,7 @@ int main(void)
 							AddFaultCodeToBuf(EventCodeDisp);
 						}
 						EVENT_INFO("%s\n", EventCodeTmp);
+						DB_Insert_Record(localDb, EventCodeTmp);
 					}
 				}
 			}