init ems server code
This commit is contained in:
104
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/Makefile
Normal file
104
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/Makefile
Normal 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 ..
|
||||
|
||||
2393
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdr.c
Normal file
2393
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdr.c
Normal file
File diff suppressed because it is too large
Load Diff
155
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdr.h
Normal file
155
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdr.h
Normal 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
|
||||
990
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrdb.c
Normal file
990
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrdb.c
Normal 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);
|
||||
}
|
||||
}
|
||||
115
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrdebug.c
Normal file
115
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrdebug.c
Normal 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
|
||||
194
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrlog.c
Normal file
194
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrlog.c
Normal 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),
|
||||
139
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrmain.c
Normal file
139
src/accountMgr/c_program/wxc1AndWxc2ConverseTools/cdrmain.c
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user