📄 loadlog.c
字号:
#include <stdio.h>
#include <time.h>
#include <unistd.h>
#include <signal.h>
#include <sys/param.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <ftw.h>
void init_daemon(void)
{
int pid; int i;
if(pid=fork())
exit(0);
else if(pid< 0)
exit(1);
setsid();
if(pid=fork())
exit(0);
else if(pid< 0)
exit(1);
for(i=0;i< NOFILE;++i)
close(i);
umask(0);
return;
}
long get_file_size(char *filename)
{
struct stat f_stat;
if (stat(filename,&f_stat)==-1)
{
return -1;
}
return (long)f_stat.st_size;
}
char *dirpath[10];
//get service name
int fn (const char *file, const struct stat *sb, int flag)
{
if(flag==FTW_D)
{
FILE* fp1;
fp1 =fopen("servicefile","a+");
fprintf (fp1,"%s\n",file);
fclose(fp1);
}
return 0;
}
struct loadavg_type
{
float OneSecond;
float FiveSecond;
float FifteenSecond;
char *timestamp;
}loadavg;
struct Meminfo_type
{
long TotalSize;
long TotalUsed;
long SwapTotal;
long SwapUsed;
char *timestamp;
}Meminfo;
int main(int argc, char *argv[])
{
FILE *fp1; //proc/loadavg
FILE *fp2; //loadlog_min
time_t time_now;
init_daemon();
while(1)
{
sleep(60); //per minute
/*read loadinfo*/
fp1 = fopen("/proc/loadavg","r");
//rewind(fp1);
fscanf(fp1,"%f %f %f",&loadavg.OneSecond,&loadavg.FiveSecond,
&loadavg.FifteenSecond);
fclose(fp1);
time(&time_now);
loadavg.timestamp = ctime(&time_now);
/*read service data*/
ftw("/proc/sys/net/pcs_dispatcher",fn,50);
FILE* fp_dir;
FILE* fp_servname;
FILE* fp_servlog;
fp_dir=fopen("servicefile","r");
int i=0;
int total_queue;
int wait_queue;
char mypath[50];
char temp[50];
char* servicename;
while(!feof(fp_dir))
{
fscanf(fp_dir,"%s\n",mypath);
if(i!=0)
{
servicename=mypath;
strcpy(temp,mypath);
strcat(mypath,"/total_req_num");
dirpath[i]=mypath;
fp_servname = fopen(dirpath[i],"r");
fscanf(fp_servname,"%d",&total_queue);
fclose(fp_servname);
strcat(temp,"/waiting_req_num");
fp_servname = fopen(dirpath[i],"r");
fscanf(fp_servname,"%d",&wait_queue);
fclose(fp_servname);
fp_servlog = fopen("/home/httpd/html/service/servlog","a+");
fprintf(fp_servlog,"pcs_service%d %s %d %d %s",i,servicename,total_queue,wait_queue, ctime(&time_now));
fclose(fp_servlog);
}
i=i+1;
}
fclose(fp_dir);
system("rm -f servicefile");
/*write load data*/
fp2 = fopen("/home/httpd/html/monitor/loadlog_min","a+");
fprintf(fp2,"%5.3f %5.3f %5.3f %s",loadavg.OneSecond,
loadavg.FiveSecond,loadavg.FifteenSecond,loadavg.timestamp);
fclose(fp2);
fp1 = fopen("/proc/meminfo","r");
fseek(fp1,66,SEEK_SET);
fscanf(fp1,"%ld %ld",&Meminfo.TotalSize,&Meminfo.TotalUsed);
fseek(fp1,131,SEEK_SET);
fscanf(fp1,"%ld %ld",&Meminfo.SwapTotal,&Meminfo.SwapUsed);
fclose(fp1);
fp2 = fopen("/home/httpd/html/monitor/memlog_min","a+");
fprintf(fp2,"%ld %ld %ld %ld %s",Meminfo.TotalSize,Meminfo.TotalUsed,
Meminfo.SwapTotal,Meminfo.SwapUsed,loadavg.timestamp);
fclose(fp2);
long loadlogsize,servlogsize;
loadlogsize=get_file_size("/home/httpd/html/monitor/loadlog_min");
servlogsize=get_file_size("/home/httpd/html/service/servlog");
if(loadlogsize>= 8L*1024L*1024L)
{
system("tail -n 15 /home/httpd/html/monitor/loadlog_min >temp");
fp1 = fopen("/home/httpd/html/monitor/loadlog_min","w+");
system("cat temp > /home/httpd/html/monitor/loadlog_min");
system("rm -f temp");
fclose(fp1);
system("tail -n 15 /home/httpd/html/monitor/memlog_min >temp");
fp2 = fopen("/home/httpd/html/monitor/memlog_min","w+");
system("cat temp > /home/httpd/html/monitor/memlog_min");
system("rm -f temp");
fclose(fp2);
}
if(servlogsize>= 8L*1024L*1024L)
{
system("tail -n 15 /home/httpd/html/service/servlog >temp");
fp1 = fopen("/home/httpd/html/service/servlog","w+");
system("cat temp > /home/httpd/html/service/servlog");
system("rm -f temp");
fclose(fp1);
}
}//daemon
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -