/** * Called by the logger timer thread. Dumps info using msg_stat */ void IpfixAggregator::stats() { int i; pthread_mutex_lock(&mutex); for (i = 0; i < rules->count; i++) { int j; uint32_t usedBuckets = 0; uint32_t usedHeads = 0; uint32_t longestSpillchain = 0; uint32_t avgAge = 0; Hashtable* ht = rules->rule[i]->hashtable; msg_stat("Concentrator: Rule %2d: Records: %6d received, %6d sent", i, ht->recordsReceived, ht->recordsSent); ht->recordsReceived = 0; ht->recordsSent = 0; for (j = 0; j < HASHTABLE_SIZE; j++) { Hashtable::Bucket* hb = ht->buckets[j]; if (hb) usedHeads++; uint32_t bucketsInSpillchain = 0; while (hb) { avgAge += time(0) - (hb->forceExpireTime - ht->maxBufferTime); usedBuckets++; bucketsInSpillchain++; hb = hb->next; } if (bucketsInSpillchain > longestSpillchain) longestSpillchain = bucketsInSpillchain; } msg_stat("Concentrator: Rule %2d: Hashbuckets: %6d used, %6d at head, %6d max chain, %6d avg age", i, usedBuckets, usedHeads, longestSpillchain, usedBuckets?(avgAge / usedBuckets):0); } pthread_mutex_unlock(&mutex); }
/** * Called by the logger timer thread. Dumps info using msg_stat */ void IpfixReceiver::stats() { msg_stat("Concentrator: IpfixReceiver: %6d records received", receivedRecords); receivedRecords = 0; }
void do_recv_messgae_from_arbiter() { char buff[65535]; struct sockaddr_in recv_control_addr; socklen_t recv_control_addr_len = sizeof(recv_control_addr); int len = 0; //struct msg_st *mesg = NULL; char buf[500]; int ret = 0; struct msg_st mesg; int msgid = 0; uint32_t count_stat = 0; //char buf[512]; char file_buf[512]; FILE *fp = NULL; fp = fopen(DATA_STREAM_FILE_NAME,"w+"); if(NULL == fp) { marbit_send_log(INFO,"failed to open file %s\n", DATA_STREAM_FILE_NAME); return; } int shmid = 0; skbstat_t *skbstat = NULL; #if 1 struct msqid_ds msg_ginfo,msg_sinfo; msg_stat(msgid,msg_ginfo); msg_sinfo.msg_perm.uid=8;//just a try msg_sinfo.msg_perm.gid=8;// msg_sinfo.msg_qbytes=16384000; //此处验证超级用户可以更改消息队列的缺省msg_qbytes #endif key_t key; key = ftok(KEYPATH, KEYPROJ); if (key<0) { marbit_send_log(INFO,"ftok()"); return; } msgid = msgget(key, IPC_CREAT|0600); if (msgid<0) { marbit_send_log(INFO,"msgget() error "); return ; } if ( (shmid = shmget(STAT_SHM_KEY, SHM_SIZE, SHM_MODE)) < 0) { marbit_send_log(INFO,"shmget"); return; } if ( ( skbstat = (skbstat_t *)shmat(shmid, NULL, 0)) == (void *) -1) { marbit_send_log(INFO, "shmat"); return; } skbstat->web_msgid = msgid; skbstat->web_mesg_flag = 1; marbit_send_log(INFO,"msgid = %d\n", msgid); marbit_send_log(INFO,"set shm web_mesg_flag = 1\n"); time_t begin_time = time(NULL); time_t finish_time = 0; marbit_send_log(INFO,"begin_time = %d\n", begin_time); while (1) { if(1 == STREAM_MESG_NUM_LIMIT_FLAG) { if(count_stat >= STREAM_MESG_NUM_LIMIT_MAX) { marbit_send_log(INFO, "count_stat[%d] >= STREAM_MESG_NUM_LIMIT_MAX[%d], just exit\n",count_stat, STREAM_MESG_NUM_LIMIT_MAX); break; } } if(1 == g_force_recv_from_arbiter_shutdown) { marbit_send_log(INFO,"g_force_recv_from_arbiter_shutdown = 1, break\n"); break; } ret = msgrcv(msgid, &mesg, sizeof(mesg)-sizeof(long), 0, IPC_NOWAIT); if (ret<0) { if(errno == ENOMSG) { continue; } marbit_send_log(ERROR,"msgrcv() error errno = %d\n", errno); break; } if(1 == mesg.finish_flag) { count_stat++; marbit_send_log(INFO,"recv message from arbiter finished! %u\n", count_stat); finish_time = time(NULL); marbit_send_log(INFO,"finish_time = %d\n", finish_time); break; } else //if(0 == mesg->finish_flag) { #if 1 fprintf(fp, "%-15u,%-15u,%-15u,%-15u,%-15u,%-15u,%-15u,%-15u,%-15u,%-15u\n", mesg.ip_src, mesg.port_src, mesg.ip_dst , mesg.port_dst, mesg.proto, mesg.proto_mark, mesg.up_bytes, mesg.down_bytes, mesg.duration_time, mesg.finish_flag); #endif count_stat++; } } time_t end_time = time(NULL); marbit_send_log(INFO,"end_time = %d\n", end_time); msgctl(msgid, IPC_RMID, NULL); fclose(fp); return;