init ems server code

This commit is contained in:
2024-09-27 15:39:34 +08:00
parent 9d4009aaca
commit 9930e4e58f
1551 changed files with 110216 additions and 102864 deletions

View File

@@ -0,0 +1,104 @@
#/bin/sh
# Makefile for CDR Module.
CC = gcc
CFLAGS=-g -Wall -I/usr/local/mysql/include
CFLAGS.ES=-g -Wall -I/usr/include/mariadb
COMPILE.c=$(CC) $(CFLAGS)
COMPILE.c.ES=$(CC) $(CFLAGS.ES)
LINK.c=$(CC) $(CFLAGS)
LINK.c.ES=$(CC) $(CFLAGS.ES)
LINKFLAG=-L../../../omcLib/c_program/ftp -lftp \
-L../../../../wxc2plat/snmp -lsnmp \
-L../../../../wxc2plat/debug -ldebug \
-L../../../../wxc2plat/iptrans -liptrans \
-L../../../../wxc2plat/public -lpublic \
-L/usr/local/mysql/lib -lmariadbclient -lz
LINKFLAG.ES=-L../../../omcLib/c_program/omcLib -lomcLib \
-L../../../omcLib/c_program/ftp -lftp \
-L../../../../plat/snmp/lib -lsnmp \
-L../../../../plat/debug/lib -ldebug \
-L../../../../plat/sccp/lib -lsccp \
-L../../../../plat/iptrans/lib -liptrans \
-L../../../../plat/public/lib -lpublic \
-L/usr/lib/mysql -lmariadbclient -lz
PROGS=cdrCollector
CDR_OBJ = cdr.o cdrdebug.o cdrdb.o cdrlog.o
CDR_OBJ.ES = cdr.o.ES cdrdebug.o.ES cdrdb.o.ES cdrlog.o.ES
default: linuxES
all:
@echo " **** Compiling $(PROGS) ****"
@echo "make clean -- Delete the target files(*.o, *.a)"
@echo "make linux72 -- Generate target files for Redhat Linux 7.2"
@echo "make linuxES -- Generate target files for Redhat ES 4.0"
linux72: $(CDR_OBJ) cdrmain.o
@cd ../../../omcLib/c_program/ftp; make linux72; cd ..
@cd ../../../accountMgr/c_program/cdrCollector;
@echo Linking $(PROGS)
@$(LINK.c) -o $(PROGS) cdrmain.o $(CDR_OBJ) $(LINKFLAG) -lm
ar r libcdr.a $(CDR_OBJ)
rm -rf *.o
rm -rf *bak
rm -rf *~
#cp -f $(PROGS) ../../../bin
#cp -f $(PROGS) /usr/local/omc/bin/
linuxES: $(CDR_OBJ.ES) cdrmain.o.ES
@cd ../../../omcLib/c_program/ftp; make linuxES; cd ..
@cd ../../../accountMgr/c_program/cdrCollector;
@echo Linking $(PROGS)
@$(LINK.c.ES) -o $(PROGS) cdrmain.o $(CDR_OBJ) $(LINKFLAG.ES) -lm
ar r libcdr.a $(CDR_OBJ)
installbin: linuxES
cp -f $(PROGS) ../../../../bin/
installomc: linuxES
cp -f $(PROGS) /usr/local/omc/bin/
installall: installbin installomc
cdrmain.o: cdrmain.c
$(COMPILE.c) -c cdrmain.c
cdr.o: cdr.c cdr.h
$(COMPILE.c) -c cdr.c
cdrdebug.o: cdrdebug.c
$(COMPILE.c) -c cdrdebug.c
cdrdb.o:cdrdb.c
$(COMPILE.c) -c cdrdb.c
cdrlog.o: cdrlog.c
$(COMPILE.c) -c cdrlog.c
cdrmain.o.ES: cdrmain.c
$(COMPILE.c.ES) -c cdrmain.c
cdr.o.ES: cdr.c cdr.h
$(COMPILE.c.ES) -c cdr.c
cdrdebug.o.ES: cdrdebug.c
$(COMPILE.c.ES) -c cdrdebug.c
cdrdb.o.ES:cdrdb.c
$(COMPILE.c.ES) -c cdrdb.c
cdrlog.o.ES: cdrlog.c
$(COMPILE.c.ES) -c cdrlog.c
clean:
rm -f *.o *.a $(PROGS)
@cd ../../../omcLib/c_program/ftp; rm -f *.o *.a; cd ..
@cd ../../../accountMgr/c_program/cdrCollector;rm -f *.o *.a; cd ..

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,155 @@
/*************************************************
File name: cdr.h
Author:
Version: 9:00:00
Date: 2002-5-7
Description:<3A><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cdrCollectorģ<72><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һЩ<D2BB><D0A9><EFBFBD><EFBFBD><EFBFBD>ͺ<EFBFBD><CDBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<09>ṹcdr_src,cdr_def,cdr_tlv
History:
No.
Author:
Date:
Version:
Description:
*************************************************/
#ifndef __CDR_HEAD_FILE
#define __CDR_HEAD_FILE
#include "mysql.h"
#include "errmsg.h"
#include <dirent.h>
#include "../../../../plat/public/src/include/asn1.h"
#include "../../../../plat/snmp/src/include/snmp.h"
#include "../../../omcLib/c_program/omcLib/omcLib.h"
#ifndef _T_DWORD
#define _T_DWORD
typedef unsigned int DWORD;
#endif
#define CDR_DEBUG 0
#define CDR_LINK_DEBUG 0
#define CDR_PORT 4968
#define CDR_SRC_NUM 32
#define CDR_TYPE_NUM 20
#define CDR_OBJ_MAX 128
#define HOST_NAME "localhost"
#define CDRDB_NAME "CDR_DB"
#define CSV_PATH "/usr/local/cdr"
#define CDR_LOG_PATH "../log"
#define CDR_LOG_FILE "cdrlog"
#define ST_GET_TAIL 0
#define ST_WAIT_TAIL 1
#define ST_CDR_IDLE 2
#define ST_GET_CDR 3
#define ST_WAIT_CDR 4
#define ST_TAIL_IDLE 5
#define ST_SET_TAIL 6
#define CDR_TIME_UNIT 20 //ms
#define CDR_T_idle 250 //5s lowest speed
#define CDR_T_getcdr 30 //60ms
#define CDR_T_gettail 500 //300*20=6000ms=10s
#define CDR_T_settail 100 //2s
#define HEAP_SIZE_MAX 256 //1024*28
#define HEAP_TIME_MAX 50*30 //30s
#define OMC_SINGLE 7
#define OMC_MASTER 5
char totalCdrFileName[128];
char cdrFileName[128];
int cdrHour;
//<2F>˽ṹ<CBBD><E1B9B9><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֶ<EFBFBD>
typedef struct cdr_tlv {
char tag_seq[17][20]; //16<31><36>tag<61><67>ֵ
char field_name[30]; //<2F>ֶε<D6B6><CEB5><EFBFBD><EFBFBD><EFBFBD>
BYTE type; //<2F>ֶε<D6B6><CEB5><EFBFBD><EFBFBD><EFBFBD>
BOOL optional; //<2F>ֶ<EFBFBD><D6B6>Ƿ<EFBFBD><C7B7><EFBFBD>ѡ
BYTE width; //<2F>ֶγ<D6B6><CEB3><EFBFBD>
} cdr_tlv;
//<2F>˽ṹ<CBBD><E1B9B9><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1>Ķ<EFBFBD><C4B6><EFBFBD><E5A3AC><EFBFBD><EFBFBD><EFBFBD>ñ<EFBFBD><C3B1><EFBFBD><EFBFBD>ֶζ<D6B6><CEB6><EFBFBD>
typedef struct cdr_def {
BOOL valid[17]; //tagλ<67><CEBB>ʶ
char field_set[1024]; //ȫ<><C8AB><EFBFBD><EFBFBD><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
char field_select[1024];//ָ<><D6B8><EFBFBD><EFBFBD><E6B1BE>ȫ<EFBFBD><C8AB><EFBFBD>ֶ<EFBFBD><D6B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>
char create_sql[2048]; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>sql<71><6C><EFBFBD><EFBFBD>
BYTE field_count; //<2F>ֶεĸ<CEB5><C4B8><EFBFBD>
cdr_tlv obj[CDR_OBJ_MAX];//<2F>ֶζ<D6B6><CEB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
} cdr_def;
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݽṹ<DDBD><E1B9B9><EFBFBD>߼<EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>CDR<44><52><EFBFBD><EFBFBD>Դ
typedef struct cdr_src {
int loss; //<2F><><EFBFBD><EFBFBD>ͳ<EFBFBD><CDB3>
int recv; //<2F><><EFBFBD>յİ<D5B5><C4B0>ĸ<EFBFBD><C4B8><EFBFBD>
int recd; //<2F><>¼<EFBFBD>İ<EFBFBD><C4B0>ĸ<EFBFBD><C4B8><EFBFBD>
BYTE cdr_ver; //<2F><EFBFBD><E6B1BE>
WORD sysTypeNo; //ϵͳ<CFB5><EFBFBD><E8B1B8>
BYTE sysid; //ϵͳ<CFB5><CDB3>
BYTE retry; //<2F><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
//informaion for getting cdr
int get_timeout; //get<65><74><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1>
BOOL get_state; //get״̬
DWORD instance; //ͷָ<CDB7><D6B8>
DWORD head; //βָ<CEB2><D6B8>
BYTE maxbind; //<2F><><EFBFBD><EFBFBD><EFBFBD>󶨱<EFBFBD><F3B6A8B1><EFBFBD><EFBFBD><EFBFBD>
DWORD request_id; //get<65><74><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ID
//information for setting ptail
int set_timeout; //set<65><74><EFBFBD><EFBFBD>ʣ<EFBFBD><CAA3>ʱ<EFBFBD><CAB1>
BYTE set_fail; //setʧ<74>ܴ<EFBFBD><DCB4><EFBFBD>
BOOL set_state; //set״̬
BOOL move_flag; //βָ<CEB2><D6B8><EFBFBD>Ƿ<EFBFBD><C7B7>ı<EFBFBD>
DWORD set_rid; //set<65><74><EFBFBD><EFBFBD>ID
snmp_addr addr; //IP<49>Ͷ˿ڵ<CBBF>ַ
DWORD oid[20]; //OID
BYTE oid_len; //OID<49><44><EFBFBD><EFBFBD>
DWORD head_oid[20]; //ͷָ<CDB7><D6B8>OID
DWORD tail_oid[20]; //βָ<CEB2><D6B8>OID
char record_table[30]; //<2F><><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>
char define_table[30]; //<2F><><EFBFBD>ݶ<EFBFBD><DDB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
char csv_path[50]; //<2F><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>
int backup_max; //<2F><><EFBFBD>󱸷ݸ<F3B1B8B7><DDB8><EFBFBD>
int buf_size; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С
cdr_def define; //<2F><>Ӧ<EFBFBD><D3A6><EFBFBD>ֶα<D6B6><CEB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//BOOL receive_tail;
//BOOL receive_cdr;
//int serial;
} cdr_src;
void converseFile();
void cdr_timer();
void cdr_init();
#if CDR_LINK_DEBUG
void cdrdebug_init();
#endif
void cdrdb_init();
void cdr_start();
void cdr_stop();
BOOL cdr_status();
void cdrdb_timer();
void cdrlog_init();
void cdrlog_timer();
void cdr_log(const char *fmt, ...);
void cdr_logmsg(BYTE * buf, int len);
void cdr_report();
int safe_query(MYSQL * conn, char *strquery, int retry);
#endif

View File

@@ -0,0 +1,990 @@
/*************************************************
File name: cdrdb.c
Author:
Version: 9:00:00
Date: 2002-5-7
Description:<3A><><EFBFBD>ļ<EFBFBD>ʵ<EFBFBD><CAB5><EFBFBD><EFBFBD>cdrCollectorģ<72><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҷ<EFBFBD>ʱ<EFBFBD>Ķ<EFBFBD><C4B6><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD>ݽ<EFBFBD><DDBD>б<EFBFBD><D0B1>ݣ<EFBFBD>
ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>csv<73><76><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
History:
No.
Author:
Date:
Version:
Description:
*************************************************/
#include "cdr.h"
#include "../../../omcLib/c_program/ftp/ftp.h"
static MYSQL *cdrdb_conn;
static MYSQL *omcPub_conn;
extern cdr_src CdrSet[CDR_SRC_NUM];
extern BYTE iCdrNum;
static BYTE backup_flag=0;
static char tb_name[64][48];
static int cdr_index = 0, tb_index = 0, tb_num = 0;
static char compress_file[64];
static char send_file[64];
static char sening_dir[128];
void enum_cdrdb();
void backup_table(char *tb_name, char *csv_path,int flag,char *selfield,BYTE cdr_ver);
void create_csv(char *tb_name, char *csv_path,int flag,char *selfield);
void create_dat_for_wxc1(char *tb_name,char *csv_path,int flag,char *selfield);
void compress_csv(char *path_name);
//void chfilename(char *path_name, char *oldname);
void delfile(char *path_name,char *filename);
void clear_table(char *tb_name);
void send_csv(char *path_name);
/*************************************************
Function: // cdrdb_init
Description: // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݿ⣬<DDBF><E2A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ӣ<EFBFBD><D3A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // mysql_init; mysql_real_connect; mysql_query;
Called By: // cdrmain.c:cdr_init;
Table Accessed: // OMC_PUB.omcPubVarConf; CDR_DB.cdrPubVarConf;
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdrdb_init()
{
char sqlstr[256];
MYSQL_RES *res;
MYSQL_ROW row;
BYTE m_state = 1;
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
while ((cdrdb_conn = mysql_init(NULL)) == NULL) {
printf("Fail to init mysql:%s\n", mysql_error(cdrdb_conn));
sleep(2);
}
//<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>
while (mysql_real_connect
(cdrdb_conn, "localhost", "root", "rootaa", "CDR_DB", 0, NULL,
0) == NULL) {
printf("Fail to init mysql:%s\n", mysql_error(cdrdb_conn));
sleep(2);
}
//<2F><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>sending_directory<72><79>ֵ
sprintf(sqlstr,
"SELECT pubVarValue FROM CDR_DB.cdrPubVarConf WHERE pubVarName='sending_directory'");
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
cdr_log("%s\n", mysql_error(cdrdb_conn));
return;
}
if ((res = mysql_store_result(cdrdb_conn)) == NULL)
return;
if((row = mysql_fetch_row(res)) != NULL) {
strcpy(sening_dir,row[0]);
}
mysql_free_result(res);
while ((omcPub_conn = mysql_init(NULL)) == NULL) {
printf("Fail to init mysql:%s\n", mysql_error(omcPub_conn));
sleep(2);
}
while (mysql_real_connect
(omcPub_conn, "localhost", "root", "rootaa", "OMC_PUB", 0, NULL,
0) == NULL) {
printf("Fail to init mysql:%s\n", mysql_error(omcPub_conn));
sleep(2);
}
//<2F><><EFBFBD>ù<EFBFBD><C3B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cdr_store_server<65><72>ֵ
sprintf(sqlstr,
"SELECT pubVarValue FROM OMC_PUB.omcPubVarConf WHERE pubVarName='cdr_store_server'");
if (mysql_query(omcPub_conn, sqlstr) != 0) {
cdr_log("%s\n", mysql_error(omcPub_conn));
return;
}
if ((res = mysql_store_result(omcPub_conn)) == NULL){
return;
}
//<2F>ж<EFBFBD><D0B6>Ƿ<EFBFBD><C7B7><EFBFBD>Ҫ<EFBFBD><D2AA><EFBFBD><EFBFBD>
if((row = mysql_fetch_row(res)) != NULL) {
if(strlen(row[0]) == 0)
{
backup_flag=0;
}
else
{
backup_flag=1;
}
}
mysql_free_result(res);
/*
while (m_state != 0) {
switch (m_state) {
case 1: //find tables in CDR_DB
if (cdr_index < iCdrNum) {
enum_cdrdb();
m_state = 2;
} else
m_state = 5;
break;
case 2: //backup table
if (tb_index < tb_num) {
backup_table(tb_name[tb_index],
CdrSet[cdr_index - 1].csv_path);
m_state = 3;
} else
m_state = 1;
break;
case 3: //delete old records
clear_table(tb_name[tb_index]);
tb_index++;
m_state = 4;
break;
case 4: //don't compress csv files
//compress_csv(CdrSet[cdr_index-1].csv_path);
m_state = 2;
break;
case 5: //finish
cdr_index = 0;
tb_index = 0;
m_state = 0;
return;
}
}*/
cdr_index = 0;
tb_index = 0;
m_state = 0;
return;
}
/*************************************************
Function: // cdrdb_timer
Description: // ÿСʱ<D0A1><CAB1>һЩ<D2BB>̶<EFBFBD><CCB6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E7B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><><C9BE><EFBFBD>ɵļ<C9B5>¼<EFBFBD><C2BC>
Calls: // backup_table; enum_cdrdb; clear_table;
Called By: // cdrmain.c:cdr_timer;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdrdb_timer()
{
unsigned long l_time;
struct tm *t;
static BYTE m_state = 0;
//for backup table per hour
int h_cdr_index=0;
//for backup table per hour
char h_tb_name[64];
int flag;
l_time = time(NULL);
t = localtime(&l_time);
if(t->tm_min==0){
for(h_cdr_index=0;h_cdr_index<iCdrNum;h_cdr_index++){
if(t->tm_hour==0){
sprintf(h_tb_name,"%s_%d",CdrSet[h_cdr_index].record_table,23);
flag=1;
}else{
sprintf(h_tb_name,"%s_%02d",CdrSet[h_cdr_index].record_table,t->tm_hour-1);
flag=0;
}
backup_table(h_tb_name, CdrSet[h_cdr_index].csv_path,flag,CdrSet[h_cdr_index].define.field_select,CdrSet[h_cdr_index].cdr_ver);
// send_csv(CdrSet[h_cdr_index].csv_path);
}
}
switch (m_state) {
//IDLE
case 0:
l_time = time(NULL);
t = localtime(&l_time);
if (t->tm_hour == 3) {
m_state = 1;
cdr_index = 0;
tb_index = 0;
}
break;
//find tables in CDR_DB
case 1:
if (cdr_index < iCdrNum) {
enum_cdrdb();
m_state = 2;
} else
m_state = 5;
break;
//backup table
case 2:
if (tb_index < tb_num) {
//backup_table(tb_name[tb_index], CdrSet[cdr_index-1].csv_path,1,CdrSet[cdr_index-1].define.field_select,CdrSet[cdr_index-1].cdr_ver);
m_state = 3;
} else
m_state = 1;
break;
//delete old records
case 3:
clear_table(tb_name[tb_index]);
tb_index++;
m_state = 4;
break;
//compress csv files
case 4:
//compress_csv(CdrSet[cdr_index].csv_path);
m_state = 2;
break;
//finish
case 5:
l_time = time(NULL);
t = localtime(&l_time);
if (t->tm_hour != 3) {
cdr_index = 0;
tb_index = 0;
m_state = 0;
}
break;
}
}
/*************************************************
Function: // enum_cdrdb
Description: // <20>ҳ<EFBFBD><D2B3><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD>Ա<EFBFBD><D4B1><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // mysql_query; mysql_store_result; mysql_fetch_row;
Called By: // cdrdb_timer;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void enum_cdrdb()
{
cdr_src *pcdr;
char sqlstr[64];
MYSQL_RES *res_set;
MYSQL_ROW row;
int i;
tb_index = tb_num = 0;
pcdr = &CdrSet[cdr_index++];
for (i = 0; i < cdr_index - 2; i++) {
if (strstr(CdrSet[i].record_table, pcdr->record_table) != NULL) {
cdr_index++;
return;
}
}
cdr_log("Search tables like %s*\n", pcdr->record_table);
sprintf(sqlstr, "SHOW TABLES FROM CDR_DB LIKE '%s_%%'",
pcdr->record_table);
if (mysql_query(cdrdb_conn, sqlstr) != 0)
return;
if ((res_set = mysql_store_result(cdrdb_conn)) == NULL)
return;
while ((row = mysql_fetch_row(res_set)) != NULL && tb_num < 64) {
if (row[0] != NULL)
strcpy(tb_name[tb_num++], row[0]);
}
mysql_free_result(res_set);
}
/*************************************************
Function: // backup_table
Description: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD><C4BC><EFBFBD>Щ׼<D0A9><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // mysql_query; mysql_store_result; mysql_fetch_row; create_dat_for_wxc1; create_csv;
Called By: // cdrdb_timer;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: // tb_name:<3A><><EFBFBD><EFBFBD>; csv_path:<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>; flag:<3A><>־λ; selfield; cdr_ver:<3A>汾;
Output: //
Return: //
Others: //
*************************************************/
void backup_table(char *tb_name, char *csv_path,int flag,char *selfield,BYTE cdr_ver)
{
char sqlstr[256];
MYSQL_RES *res_set;
MYSQL_ROW row;
char timestr[50];
//char mytime[20],myday[20];
long l_time;
struct tm *t;
cdr_log("Start backup table %s\n", tb_name);
if(flag==1)
sprintf(sqlstr,
"SELECT DATE_FORMAT(releaseTime,'%%Y_%%m_%%d') FROM %s WHERE TO_DAYS(releaseTime)<TO_DAYS(NOW()) LIMIT 1",
tb_name);
else
sprintf(sqlstr,
"SELECT DATE_FORMAT(releaseTime,'%%Y_%%m_%%d') FROM %s WHERE TO_DAYS(releaseTime)=TO_DAYS(NOW()) LIMIT 1",
tb_name);
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
cdr_log("Fail to query:%s\n", mysql_error(cdrdb_conn));
return;
}
if ((res_set = mysql_store_result(cdrdb_conn)) == NULL)
return;
if ((row = mysql_fetch_row(res_set)) == NULL || row[0] == NULL) {
mysql_free_result(res_set);
cdr_log("No old record in table\n");
l_time = time(NULL);
if(flag==1)
l_time = l_time-24*3600;//for the yesterday
t = localtime(&l_time);
sprintf(timestr,"%04d_%02d_%02d",t->tm_year + 1900, t->tm_mon + 1,t->tm_mday);
// return;
}else{
strcpy(timestr, row[0]);
mysql_free_result(res_set);
}
//<2F><><EFBFBD>ݰ汾<DDB0>Ų<EFBFBD><C5B2><EFBFBD>csv<73>ļ<EFBFBD>
/*if(cdr_ver==1)
create_dat_for_wxc1(tb_name, timestr, csv_path,flag,selfield);
else
create_csv(tb_name, timestr, csv_path,flag,selfield);*/
}
/*************************************************
Function: // create_csv
Description: // <20><><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD>
Calls: // mysql_query;
Called By: // backup_table;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: // tb_name:<3A><><EFBFBD><EFBFBD>; time_str:ʱ<><CAB1>; csv_path:<3A><><EFBFBD><EFBFBD>·<EFBFBD><C2B7>; flag:<3A><>־λ; selfield;
Output: //
Return: //
Others: //
*************************************************/
void create_csv(char *tb_name, char *csv_path,int flag,char *selfield)
{
char olddir[128], sqlstr[1024], csv_file[32], tb_prefix[32], *pchr, cmdstr[1024]; //cur_path[96],dirname[32];
struct stat fileinfo;
// char filestr[]
// MYSQL_RES *res_set;
// MYSQL_ROW row;
strcpy(tb_prefix, tb_name);
if ((pchr = strchr(tb_prefix, '_')) == NULL)
return;
*(pchr++) = '\0';
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ŀ¼
getcwd(olddir, 128);
cdr_log("%s\n", tb_name);
cdr_log("%s\n", csv_path);
if (chdir(csv_path) == -1) {
sprintf(cmdstr, "mkdir -p -m777 %s", csv_path);
cdr_log("%s\n", cmdstr);
system(cmdstr);
if (chdir(csv_path) == -1)
return;
}
//<2F><>sending_dirĿ¼ȥ<C2BC><C8A5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>򴴽<EFBFBD>
if (chdir(sening_dir) == -1) {
sprintf(cmdstr, "mkdir -p -m777 %s", sening_dir);
cdr_log("%s\n", cmdstr);
system(cmdstr);
if (chdir(sening_dir) == -1)
return;
}
//sprintf(csv_file, "%s_%s_%s.csv", tb_prefix, time_str, pchr);
sprintf(csv_file, "%s", cdrFileName);
//chfilename(csv_path, csv_file);
delfile(csv_path, csv_file);
cdr_log("%s\n", csv_path);
cdr_log("%s\n", csv_file);
cdr_log("%s\n", CDRDB_NAME);
cdr_log("%s\n", tb_name);
//*************************************************************
//<2F><><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD>
if(flag==1)
sprintf(sqlstr,
"SELECT %s INTO OUTFILE '%s/%s' FROM %s.%s ",
selfield,csv_path, csv_file, CDRDB_NAME, tb_name);
else
sprintf(sqlstr,
"SELECT %s INTO OUTFILE '%s/%s' FROM %s.%s ",
selfield,csv_path, csv_file, CDRDB_NAME, tb_name);
//sprintf(sqlstr,"SELECT * INTO OUTFILE '%s/%s' FIELDS TERMINATED BY ',' FROM %s.%s WHERE TO_DAYS(releaseTime)<TO_DAYS(NOW())",csv_path,csv_file,CDRDB_NAME,tb_name);
printf("%s\n", sqlstr);
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
printf("Fail to create csv:%s\n", mysql_error(cdrdb_conn));
{
chdir(olddir);
return;
}
} else {
//if(backup_flag)
{
//<2F><><EFBFBD><EFBFBD><EFBFBD>ɵ<EFBFBD>csv<73>ļ<EFBFBD><C4BC>ƶ<EFBFBD><C6B6><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD>ı<EFBFBD><C4B1><EFBFBD>·<EFBFBD><C2B7>
sprintf(send_file,"%s",csv_file);
sprintf(cmdstr, "cp %s/%s %s/%s.bak",csv_path,csv_file,csv_path,csv_file);
system(cmdstr);
sprintf(cmdstr, "mv %s/%s.bak %s/%s",csv_path,csv_file,sening_dir,csv_file);
system(cmdstr);
}
if (stat(csv_file, &fileinfo) == 0)
{
/*if (fileinfo.st_size == 0) {
cdr_log("zero size,delete file %s\n", csv_file);
remove(csv_file);
} else*/
strcpy(compress_file, csv_file);
}
}
//chdir(olddir);
}
/*************************************************
Function: // clear_table
Description: // ɾ<><C9BE><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD>ݱ<EFBFBD>
Calls: // mysql_query; mysql_store_result; mysql_fetch_row;
Called By: // cdrdb_timer;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: // tb_name:<3A><><EFBFBD><EFBFBD>;
Output: //
Return: //
Others: //
*************************************************/
void clear_table(char *tb_name)
{
char sqlstr[256];
MYSQL_RES *res_set;
MYSQL_ROW row;
cdr_log("clear table %s...", tb_name);
//ɾ<><C9BE><EFBFBD><EFBFBD><EFBFBD>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD>ݱ<EFBFBD>
sprintf(sqlstr,
"DELETE FROM %s.%s ",
CDRDB_NAME, tb_name);
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
cdr_log("Fail to clear table:%s\n", mysql_error(cdrdb_conn));
return;
}
/*
cdr_log("optimizing...\n");
sprintf(sqlstr, "OPTIMIZE TABLE %s", tb_name);
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
cdr_log("Fail to optimizing table:%s\n", mysql_error(cdrdb_conn));
return;
}
if ((res_set = mysql_store_result(cdrdb_conn)) != NULL) {
while ((row = mysql_fetch_row(res_set))) {
cdr_log("%s/%s/%s/%s\n", row[0], row[1], row[2], row[3]);
}
}
mysql_free_result(res_set);*/
}
/*************************************************
Function: // compress_csv
Description: // ѹ<><D1B9>csv<73>ļ<EFBFBD>
Calls: //
Called By: // cdrdb_timer;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: // path_name:·<><C2B7><EFBFBD><EFBFBD>;
Output: //
Return: //
Others: //
*************************************************/
void compress_csv(char *path_name)
{
char olddir[128], *pchr, file_prefix[64], csv_file[64], tarfile[64],
cmdstr[128];
DWORD oldmask;
//<2F>Ƿ<EFBFBD><C7B7>ļ<EFBFBD>
if (strlen(compress_file) < 1)
return;
cdr_log("start compress file '%s' in %s\n", compress_file, path_name);
strcpy(csv_file, compress_file);
strcpy(file_prefix, compress_file);
compress_file[0] = '\0';
//<2F><><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD>
if ((pchr = strstr(file_prefix, ".csv")) == NULL)
return;
*(pchr) = '\0';
getcwd(olddir, 128);
if (chdir(path_name) == -1)
return;
sprintf(tarfile, "%s.tgz", file_prefix);
//chfilename(path_name, tarfile);
delfile(path_name, tarfile);
//<2F><>ʼѹ<CABC><D1B9>
oldmask = umask(0);
sprintf(cmdstr, "tar zvfc ./%s ./%s", tarfile, csv_file);
system(cmdstr);
umask(oldmask);
if (access(tarfile, F_OK) == 0)
remove(csv_file);
else {
cdr_log("Fail to compress csv file %s\n", csv_file);
chdir(olddir);
return;
}
chdir(olddir);
}
/*
void chfilename(char *path_name, char *oldname)
{
char newname[64], newpath[96];
int n = 0;
strcpy(newname, oldname);
sprintf(newpath, "%s/%s", path_name, newname);
while (access(newpath, F_OK) == 0) {
sprintf(newname, "%s~%d", oldname, n++);
sprintf(newpath, "%s/%s", path_name, newname);
}
cdr_log("File %s/%s exist.change it's name to %s\n", path_name,
oldname, newname);
strcpy(oldname, newname);
}
*/
/*************************************************
Function: // delfile
Description: // ɾ<><C9BE>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD>
Calls: //
Called By: // create_csv;
Table Accessed: //
Table Updated: //
Input: // path_name:·<><C2B7><EFBFBD><EFBFBD>; file_name:<3A>ļ<EFBFBD><C4BC><EFBFBD>
Output: //
Return: //
Others: //
*************************************************/
void delfile(char *path_name, char *filename)
{
char path[96];
sprintf(path, "%s/%s", path_name, filename);
if(access(path, F_OK) == 0) {
unlink(path);
}
cdr_log("File %s/%s exist.It has been deleted for the new file\n", path_name,
filename);
}
/*************************************************
Function: // safe_query
Description: // <20><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD>
Calls: // mysql_ping<6E><67>
Called By: //
Table Accessed: //
Table Updated: //
Input: // conn:<3A><><EFBFBD>ݿ<EFBFBD><DDBF><EFBFBD><EFBFBD><EFBFBD>; strquery:sql<71><6C><EFBFBD><EFBFBD>; retry:<3A><><EFBFBD>Դ<EFBFBD><D4B4><EFBFBD>
Output: //
Return: //
Others: // <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ݹ麯<DDB9><E9BAAF><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ģ<EFBFBD><C4A3>û<EFBFBD>б<EFBFBD><D0B1><EFBFBD><EFBFBD><EFBFBD>
*************************************************/
int safe_query(MYSQL * conn, char *strquery, int retry)
{
int errno;
if (mysql_query(conn, strquery) == 0) {
return 0;
} else {
errno = mysql_errno(conn);
if (errno == CR_SERVER_GONE_ERROR || errno == CR_SERVER_LOST) {
retry %= 5;
cdr_log("error NO.:%d,retry...remain %d times\n", errno,
retry);
if (mysql_ping(conn)) {
cdr_log("lost connection to mysql server\n");
return 1;
}
if (retry-- > 0)
return safe_query(conn, strquery, retry);
else {
cdr_log("%s\n", strquery);
cdr_log("error %d:%s\n", mysql_errno(conn),
mysql_error(conn));
cdr_log("can't fix the error\n");
return 1;
}
} else {
cdr_log("%s\n", strquery);
cdr_log("error %d:%s\n", mysql_errno(conn), mysql_error(conn));
return 1;
}
}
}
/*************************************************
Function: // send_csv
Description: // <20><><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD><C4BC><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ŀ¼
Calls: // mysql_query; mysql_store_result; mysql_fetch_row;
Called By: //
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: // <20>˺<EFBFBD><CBBA><EFBFBD><EFBFBD>ѷ<EFBFBD><D1B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*************************************************/
void send_csv(char *path_name)
{
/*char serverinfo[128],sqlstr[256],*username,*pwd,*serverip,*remotepath, *pchr;
char locationpath[128];
char sendpath[128];
char getpath[128];
char localIP[16][16];
MYSQL_RES *res;
MYSQL_ROW row;
int nRet,tmppathlen,count;
if(*send_file==0){
return;
}
sprintf(sqlstr,
"SELECT pubVarValue FROM OMC_PUB.omcPubVarConf WHERE pubVarName='cdr_store_server'");
if (mysql_query(omcPub_conn, sqlstr) != 0) {
cdr_log("%s\n", mysql_error(omcPub_conn));
return;
}
if ((res = mysql_store_result(omcPub_conn)) == NULL)
return;
if((row = mysql_fetch_row(res)) != NULL) {
memset(serverinfo, 0, sizeof(serverinfo));
strcpy(serverinfo,row[0]);
}
mysql_free_result(res);
tmppathlen =0;
tmppathlen = strlen(serverinfo);
if (serverinfo[tmppathlen-1] != '/'||tmppathlen<127){
serverinfo[tmppathlen]='/';
serverinfo[tmppathlen+1]='\0';
//strcat(serverinfo,"/");
}
username= serverinfo;//get username
if((pchr = strstr(serverinfo, "@"))==NULL){
cdr_log("send csv files error,cdr_store_server param error!\n");
return;
}
*(pchr++) = '\0';
serverip = pchr; //get server ip
if((pchr = strstr(username, ":"))==NULL){
cdr_log("send csv files error,cdr_store_server param error!\n");
return;
}
*(pchr++) = '\0';
pwd = pchr;//get password
if((pchr = strstr(serverip, ">"))==NULL){
cdr_log("send csv files error,cdr_store_server param error!\n");
return;
}
*(pchr++) = '\0';
remotepath = pchr;//get remotepath
*/
//****************************************
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cdr<64><72>Ŀ¼<C4BF>ϴ<EFBFBD>
//****************************************
// serverip+remotepath eg:172.18.234.235/tmp/
/*sprintf(sendpath,"%s%s",serverip,remotepath);
nRet=ftp_getlocalip(localIP);
if(nRet>16) nRet=16;
for(count=0;count<nRet;count++){
sprintf(getpath,"%s%s/",localIP[count],path_name);
if(strcmp(getpath,sendpath)==0){
// printf("the same place..return\n");
return;
}
}*/
//****************************************
/*if((nRet=ftp_open(serverip,21)==1)){
cdr_log("send csv files error,%s->ftp open failed\n",ftp_retmsg);
ftp_logout();
return;
}
if((nRet=ftp_login(username,pwd)==1)){
cdr_log("send csv files error,%s->ftp login failed\n",ftp_retmsg);
ftp_logout();
return;
}
if((nRet = ftp_cwd(remotepath)==1)){
cdr_log("send csv files error,%s->ftp CWD failed\n",ftp_retmsg);
ftp_logout();
return;
}
sprintf(locationpath,"%s/",path_name);
if((nRet = ftp_putfile(send_file,locationpath)==1)){
cdr_log("send csv files error,%s->upload failed\n",ftp_retmsg);
ftp_logout();
return;
}
ftp_logout();
memset(send_file,0,64);
return; */
}
/*************************************************
Function: // create_dat_for_wxc1
Description: // <20><><EFBFBD><EFBFBD>wxc1<63><31>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD>ô˺<C3B4><CBBA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݱ<EFBFBD><DDB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>csv<73>ļ<EFBFBD>
Calls: // mysql_query; mysql_store_result; mysql_fetch_row;
Called By: // backup_table;
Table Accessed: // <20><><EFBFBD>ݱ<EFBFBD>
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void create_dat_for_wxc1(char *tb_name,char *csv_path,int flag,char *selfield)
{
char olddir[128], sqlstr[1024], csv_file[32], tb_prefix[32], *pchr, cmdstr[1024]; //cur_path[96],dirname[32];
int wcount=0;
char dat_file[64];
MYSQL_RES *res_set;
MYSQL_ROW row;
FILE *dat_fp;
unsigned long l_time;
struct tm *t;
char str[512];
int res_num,i;
int p_width[27]={8,18,23,23,23,23,23,11,11,16,7,7,22,23,23,23,15,9,7,23,7,7,7,23,23,11,9};
//int p_width[28]={8,18,23,23,23,23,23,11,11,6,10,7,7,22,23,23,23,15,9,7,23,7,7,7,23,23,11,9};
strcpy(tb_prefix, tb_name);
if ((pchr = strchr(tb_prefix, '_')) == NULL)
return;
*(pchr++) = '\0';
getcwd(olddir, 128);
cdr_log("%s\n", tb_name);
cdr_log("%s\n", csv_path);
if (chdir(csv_path) == -1) {
sprintf(cmdstr, "mkdir -p -m777 %s", csv_path);
cdr_log("%s\n", cmdstr);
system(cmdstr);
if (chdir(csv_path) == -1)
return;
}
if (chdir(sening_dir) == -1) {
sprintf(cmdstr, "mkdir -p -m777 %s", sening_dir);
cdr_log("%s\n", cmdstr);
system(cmdstr);
if (chdir(sening_dir) == -1)
return;
}
//sprintf(csv_file, "%s_%s_%s.csv", tb_prefix, time_str, pchr);
sprintf(csv_file, "%s", cdrFileName);
//chfilename(csv_path, csv_file);
delfile(csv_path, csv_file);
cdr_log("%s\n", csv_path);
cdr_log("%s\n", csv_file);
cdr_log("%s\n", CDRDB_NAME);
cdr_log("%s\n", tb_name);
//*************************************************************
if(flag==1)
sprintf(sqlstr,
"SELECT %s FROM %s.%s WHERE TO_DAYS(releaseTime)<TO_DAYS(NOW())",
selfield, CDRDB_NAME, tb_name);
else
sprintf(sqlstr,
"SELECT %s FROM %s.%s WHERE TO_DAYS(releaseTime)=TO_DAYS(NOW())",
// "SELECT %s FROM %s.%s",
selfield, CDRDB_NAME, tb_name);
cdr_log("%s\n", sqlstr);
if (mysql_query(cdrdb_conn, sqlstr) != 0) {
cdr_log("%s\n", mysql_error(cdrdb_conn));
return;
}
if ((res_set = mysql_store_result(cdrdb_conn)) == NULL) {
cdr_log("%s\n", mysql_error(cdrdb_conn));
return;
}
sprintf(dat_file, "%s/%s", csv_path, csv_file);
dat_fp = fopen(dat_file, "w");
if(dat_fp==NULL){
cdr_log("Fail to create file\n");
chdir(olddir);
return;
}
res_num = mysql_num_rows(res_set);
l_time = time(NULL);
t = localtime(&l_time);
fprintf(dat_fp,"FILE NAME: %s NO. OF RECORDS:%-10d\n",dat_file,res_num);
fprintf(dat_fp,"START DATE: %02d/%02d/%d START TIME: %02d:%02d:%02d\n\n",t->tm_mon+1,t->tm_mday,t->tm_year+1900,t->tm_hour,t->tm_min,t->tm_sec);
fprintf(dat_fp,"Type Imsi Msisdn Msrn Calling # Called # RE In.TkGp Ou.TkGp Location BS SS Mob. ClassMark Seizure Time Answer Time Release Time Duration TCos SSA SS Parm. SSR CR RCU SM Delivery Time SC Address SM Rslt MsgRf \n\n");
while ((row = mysql_fetch_row(res_set)) != NULL){
if(atoi(row[0])!=6&&atoi(row[0])!=7){ //not sms
if(row[16]==NULL||atoi(row[16])==0) //Duration=0 skip
continue;
}
for(i=0;i<27;i++){
if(row[i]==NULL){
if(i==7||i==8){
;//In.TkGp,Ou.TkGpr skip
}else{
fprintf(dat_fp,"%-*s",p_width[i],"--");
continue;
}
}
switch (i){
case 0: // Type
case 10:// basicService
case 11:// supplServicesUsed
case 18:// SSA
case 20:// SSR
case 26:// MsgRf
sprintf(str,"%03d",atoi(row[i]));
break;
case 7:// In.TkGp
case 8:// Ou.TkGp
if(atoi(row[0])==6||atoi(row[0])==7){//sms
sprintf(str,"--");
}else{
sprintf(str,"00 00 00");
}
break;
case 15:// releaseTime
if(atoi(row[0])==6||atoi(row[0])==7){
fprintf(dat_fp,"%-*s",p_width[i],"--");
continue;
}
case 13:// seizureTime
case 14:// answerTime
case 23:// SmDeliveryTime
// 2001-06-07 11:12:22->
// 06/07/2001 11:12:22
{
int y=0,m=0,d=0;
pchr=row[i];
y = atoi(pchr);
pchr = strchr(pchr,'-');
if(pchr==NULL)
{
sprintf(str,"%02d/%02d/%02d %s",m,d,y,pchr);
break;
}
pchr++;
m = atoi(pchr);
pchr = strchr(pchr,'-');
pchr++;
if(pchr==NULL)
{
sprintf(str,"%02d/%02d/%02d %s",m,d,y,pchr);
break;
}
d = atoi(pchr);
pchr = strchr(pchr,' ');
sprintf(str,"%02d/%02d/%02d %s",m,d,y,pchr);
break;
}
case 16://callDuration
{
int d,h,m,s,total;
total =atoi(row[i]);
d = total/86400;
h = (total%86400)/3600;
m = (total%3600)/60;
s = total%60;
sprintf(str,"%02d:%02d:%02d:%02d",d,h,m,s);
break;
}
// case 9: // location_mscNumber
// case 10:// location_mscNumber_2
case 17:// TCos
sprintf(str,"%05d",atoi(row[i]));
break;
case 21:// CR
sprintf(str,"%04d",atoi(row[i]));
break;
sprintf(str,"%s",row[i]);
break;
case 12:// Mob. ClassMark
sprintf(str,"1f %s",row[i]);
break;
default:
sprintf(str,"%s",row[i]);
break;
}
fprintf(dat_fp,"%-*s",p_width[i],str);
}
fprintf(dat_fp,"\n");
wcount++;
}
fseek(dat_fp,0,SEEK_SET);
fprintf(dat_fp,"FILE NAME: %s NO. OF RECORDS:%-10d\n",dat_file,wcount);
mysql_free_result(res_set);
strcpy(compress_file, csv_file);
fclose(dat_fp);
chdir(olddir);
if(backup_flag)
{
sprintf(send_file,"%s",csv_file);
sprintf(cmdstr, "cp %s/%s %s/%s.bak",csv_path,csv_file,csv_path,csv_file);
system(cmdstr);
sprintf(cmdstr, "mv %s/%s.bak %s/%s",csv_path,csv_file,sening_dir,csv_file);
system(cmdstr);
}
}

View File

@@ -0,0 +1,115 @@
/*************************************************
File name: cdrdebug.c
Author:
Version: 9:00:00
Date: 2002-5-7
Description:<3A><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>˵<EFBFBD><CBB5>Եĺ<D4B5><C4BA><EFBFBD>
History:
No.
Author:
Date:
Version:
Description:
*************************************************/
#include "cdr.h"
#if CDR_LINK_DEBUG
extern cdr_src CdrSet[CDR_SRC_NUM];
extern BYTE iCdrNum;
static char debug_buf[4096];
//static char asc_in[256];
void cdr_debug_info(BYTE npage, BYTE nline, BYTE * pt, BYTE len);
/*************************************************
Function: // cdrdebug_init
Description: // <20><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3>
Calls: //
Called By: //
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdrdebug_init()
{
DWORD asc_id[20] = { 1, 3, 6, 1, 4, 1, 1373, 1, 3, 2, 3, 1, 2, 16, 4 };
DWORD status_id[20] =
{ 1, 3, 6, 1, 4, 1, 1373, 1, 3, 2, 3, 1, 2, 16, 1 };
DWORD name_id[20] =
{ 1, 3, 6, 1, 4, 1, 1373, 1, 3, 2, 3, 1, 2, 16, 2 };
DWORD title_id[20] =
{ 1, 3, 6, 1, 4, 1, 1373, 1, 3, 2, 3, 1, 2, 16, 6, 1 };
static char module_name[16] = "CDR";
static BYTE debug_status = 1;
cdr_src *pcdr;
BYTE i;
char title[320], info[320] = {
"1 2\r\n"
"IP\r\n"
"Port\r\n"
"receive\r\n"
"record\r\n"
"lost\r\n"
"tail\r\n"
"head\r\n"
"bind num\r\n"
"get state\r\n" "get timeout\r\n" "set state\r\n" "set timeout"
};
debug_set_response(15, asc_id, debug_buf, 1);
debug_set_response(15, status_id, &debug_status, 1);
debug_set_response(15, name_id, module_name, strlen(module_name));
for (i = 0; i < iCdrNum; i++) {
pcdr = &CdrSet[i];
sprintf(title, "\tCDR Collector\tPage %02d\t\tMessage\r\n%s",
i + 1, info);
title_id[14] = i + 6;
debug_set_response(15, title_id, title, strlen(title));
cdr_debug_info(i + 1, 2, (BYTE *) & pcdr->addr.remote_ip, 4);
cdr_debug_info(i + 1, 3, (BYTE *) & pcdr->addr.remote_port, 2);
cdr_debug_info(i + 1, 4, (BYTE *) & pcdr->recv, 4);
cdr_debug_info(i + 1, 5, (BYTE *) & pcdr->recd, 4);
cdr_debug_info(i + 1, 6, (BYTE *) & pcdr->loss, 4);
cdr_debug_info(i + 1, 7, (BYTE *) & pcdr->instance, 4);
cdr_debug_info(i + 1, 8, (BYTE *) & pcdr->head, 4);
cdr_debug_info(i + 1, 9, (BYTE *) & pcdr->maxbind, 4);
cdr_debug_info(i + 1, 10, (BYTE *) & pcdr->get_state, 1);
cdr_debug_info(i + 1, 11, (BYTE *) & pcdr->get_timeout, 4);
cdr_debug_info(i + 1, 12, (BYTE *) & pcdr->set_state, 1);
cdr_debug_info(i + 1, 13, (BYTE *) & pcdr->set_timeout, 4);
}
}
/*************************************************
Function: // cdr_debug_info
Description: // <20><>ʾ<EFBFBD><CABE><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
Calls: //
Called By: //
Table Accessed: //
Table Updated: //
Input: // npage; nline; pt; len;
Output: //
Return: //
Others: //
*************************************************/
void cdr_debug_info(BYTE npage, BYTE nline, BYTE * pt, BYTE len)
{
DWORD oid[20] =
{ 1, 3, 6, 1, 4, 1, 1373, 1, 3, 2, 3, 1, 2, 16, 5, 2, 2 };
oid[14] = 5 + npage;
oid[15] = nline;
debug_set_response(17, oid, pt, len);
}
#endif

View File

@@ -0,0 +1,194 @@
/*************************************************
File name: cdrlog.c
Author:
Version: 9:00:00
Date: 2002-7-2
Description:<3A><><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cdrCollectorģ<72><C4A3><EFBFBD><EFBFBD>־<EFBFBD><D6BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
History:
No.
Author:
Date:
Version:
Description:
*************************************************/
#include "cdr.h"
static FILE *log_fp;
extern BYTE iCdrNum;
extern cdr_src CdrSet[CDR_SRC_NUM];
/*************************************************
Function: // cdrlog_init
Description: // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD>Ա<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־
Calls: //
Called By: // cdrmain.c; cdrdb.c;
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdrlog_init()
{
char log_file[64], cmdstr[64];
long l_time;
struct tm *t;
l_time = time(NULL);
t = localtime(&l_time);
if (access(CDR_LOG_PATH, F_OK) != 0)
{
sprintf(cmdstr, "mkdir -p -m777 %s", CDR_LOG_PATH);
printf("%s\n", cmdstr);
system(cmdstr);
}
sprintf(log_file, "%s/%s_%d_%d", CDR_LOG_PATH, CDR_LOG_FILE,
t->tm_mon + 1, t->tm_mday);
log_fp = fopen(log_file, "a");
cdr_log("CDR Module start up.%s", ctime(&l_time));
}
/*************************************************
Function: // cdrlog_timer
Description: // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>дһЩ<D2BB><D0A9>־
Calls: // cdr_log;
Called By: // cdr.c:cdr_timer;
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdrlog_timer()
{
char log_file[64];
long l_time;
static BYTE ch = 0, ch2 = 0;
static short m_state;
struct tm *t;
if (m_state++ < 6)
return;
m_state = 0;
l_time = time(NULL);
t = localtime(&l_time);
if (ch2 == 0 && t->tm_min % 15 <= 3) //report per 15 minute
{
cdr_report();
ch2 = 1;
}
else if (t->tm_min % 15 > 3)
ch2 = 0;
if (t->tm_hour == 0 && ch == 0)
{
if (log_fp != NULL)
fclose(log_fp);
sprintf(log_file, "%s/%s_%d_%d", CDR_LOG_PATH, CDR_LOG_FILE,
t->tm_mon + 1, t->tm_mday);
if ((log_fp = fopen(log_file, "a")) != NULL)
ch = 1;
}
else if (t->tm_hour > 0)
ch = 0;
}
/*************************************************
Function: // cdr_report
Description: // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>־<EFBFBD>ļ<EFBFBD><C4BC><EFBFBD>д<EFBFBD><D0B4>CDR<44><52><EFBFBD><EFBFBD>Դ<EFBFBD><D4B4>һЩ<D2BB><D0A9>Ϣ
Calls: // cdr_log;
Called By: // cdrlog_timer;
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void cdr_report()
{
BYTE i;
long l_time;
struct tm *t;
cdr_src * pcdr;
l_time = time(NULL);
t = localtime(&l_time);
cdr_log("=================%02d:%02d:%02d================\n",
t->tm_hour, t->tm_min, t->tm_sec);
for (i = 0; i < iCdrNum; i++)
{
pcdr = &CdrSet[i];
cdr_log("%-08lX(%s-%d)\n", htonl(pcdr->addr.remote_ip),

View File

@@ -0,0 +1,139 @@
/*************************************************
File name: cdr.c
Author:
Version: 9:00:00
Date: 2002-5-7
Description:cdrCollectorģ<72><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><C4BC><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>snmp<6D><70>iptransģ<73><EFBFBD><E9A3AC><EFBFBD><EFBFBD>cdr.c<><63><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
<09><><EFBFBD>嶨ʱ<E5B6A8><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ö<EFBFBD>ʱ
<09><><EFBFBD><EFBFBD><EFBFBD>ⲿģ<E2B2BF><C4A3><EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD>
void snmp_init(WORD nport);
void iptrans_init();
History:
No.
Author:
Date:
Version:
Description:
*************************************************/
#include "cdr.h"
static struct itimerval itimer, old_itimer;
static void On_Timer();
static void SetTimer();
/*************************************************
Function: // main
Description: // <20><>ʼ<EFBFBD><CABC>snmp<6D><70>iptransģ<73><C4A3>,<2C><>ʼ<EFBFBD><CABC><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // iptrans_init; snmp_init;
Called By: //
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
int main(int argc, char *argv[])
{
pid_t pid;
//debug_init();
//fprintf(stderr, "\n Calling iptrans_init()");
//iptrans_init();
//fprintf(stderr, "\n Calling snmp_init()");
//snmp_init(CDR_PORT);
/*
if (argc == 2 && strstr(argv[1], "-d")) {
if ((pid = fork()) != 0)
exit(0);
setsid();
//umask(0);
}*/
if (argc != 4) {
exit(0);
}
strcpy(totalCdrFileName,argv[1]);
strcpy(cdrFileName,argv[2]);
cdrHour=atoi(argv[3]);
cdr_init();
//cdr_start();
converseFile();
/*
SetTimer();
while (1) {
//cdr_loop();
usleep(50);
}
return 1;
*/
}
/*************************************************
Function: // On_Timer
Description: // <20><>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // cdr_timer
Called By: //
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void On_Timer()
{
//debug_rt();
//snmp_timer();
cdr_timer();
}
/*************************************************
Function: // SetTimer
Description: // <20><><EFBFBD>ö<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
Calls: // On_Timer
Called By: //
Table Accessed: //
Table Updated: //
Input: //
Output: //
Return: //
Others: //
*************************************************/
void SetTimer()
{
struct sigaction act;
act.sa_handler = On_Timer;
sigemptyset(&act.sa_mask);
act.sa_flags = 0;
if (sigaction(SIGALRM, &act, NULL) < 0) {
perror("Produce Sigaction");
exit(1);
}
itimer.it_interval.tv_sec = 0;
itimer.it_interval.tv_usec = 20 * 1000;
itimer.it_value.tv_sec = 0;
itimer.it_value.tv_usec = 20 * 1000;
if (setitimer(ITIMER_REAL, &itimer, &old_itimer) != 0) {
printf("Setting Timer error! \n");
exit(1);
}
}

View File

@@ -0,0 +1,14 @@
#!/bin/sh
cdrFileArr=`ls /tmp/needConverseCdrFiles/*`
echo "Start conversing."
for totalCdrFileName in $cdrFileArr ; do
cdrFile=`echo $totalCdrFileName|awk -F"/" '{print $4}'`
hour=`echo $totalCdrFileName|awk -F"_" '{print $5}'|awk -F"." '{print $1}'`
echo $totalCdrFileName $cdrFile $hour
./cdrCollector $totalCdrFileName $cdrFile $hour
echo "."
done