nagios插件之检测mqa的日志文件更新时间

vi check_file_uptime.c

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>
#include <ifaddrs.h>
#include <netinet/in.h> 
#include <arpa/inet.h>
#include <string.h> 

#define OK       0
#define WARNING  1
#define CRITICAL 2
#define UNKNOWN  3

#define LEN 1023
//#define LOG_FILE "/var/log/asterisk/cdr-csv/Master.csv"
#define LOG_FILE "/DATE/anylink/probus5/logs/SPZHJJR1/SPZHJJR1_RTEcontainer1/servlet/accesslog/access.log"
//#define LOG_FILE "/DATE/anylink/probus5/logs/SPZHJJR4/SPZHJJR4_RTEcontainer1/servlet/accesslog/access.log"
#define LOG_FILE "/opt/MQ-Adapter/log/mqsgip.log"
//#define LOG_FILE "/home/uniadmin/neo/test/check_file_time/Master.csv"

#define SHORT_TIME 300
#define LONG_TIME 1200
//#define TIME 60


int exitstatus=OK;
char *exit_status[4]={"OK","WARNING","CRITICAL","UNKNOWN"};

char status_information[LEN];
char performance_data[LEN];

time_t timestamp;


int is_master_or_slave(void) {
        int mark=0;
        struct ifaddrs * ifAddrStruct=NULL;
        void * tmpAddrPtr=NULL;
        char addressBuffer[INET_ADDRSTRLEN];

        getifaddrs(&ifAddrStruct);

        while(ifAddrStruct!=NULL) {
                tmpAddrPtr=&((struct sockaddr_in *)ifAddrStruct->ifa_addr)->sin_addr;

                inet_ntop(AF_INET, tmpAddrPtr, addressBuffer, INET_ADDRSTRLEN);

        //      if (ifAddrStruct->ifa_addr->sa_family==AF_INET) { 
        //      if (!strncmp(addressBuffer,"10.199.75.169",13)) { 

                if (!strcmp(addressBuffer,"10.127.2.137")) { 
                //      printf("%s IP Address %s\n", ifAddrStruct->ifa_name, addressBuffer); 
                        mark=1;
                        break;
                }

                ifAddrStruct=ifAddrStruct->ifa_next;
        }

        if(mark==1) {
                return 1;
        }
        else
                return 0;
}

int diff_time(int istime) {
        int ret;
        int result=0;
        struct stat getstat;

//      printf("istime=%d\n",istime);

//      timestamp=time(NULL);
//      printf("now time=%d\n",timestamp);

        ret=stat(LOG_FILE,&getstat);
        if(ret==-1) {
                if(errno==ENOENT) {
                        fprintf(stderr,"File or Path not found.\n");

                        sprintf(status_information,"File or Patch not found.");
                        exitstatus=CRITICAL;

                        printf("%s: - %s\n",exit_status[exitstatus],status_information);

                        return exitstatus;
                }
                else {
                        fprintf(stderr,"Other error.\n");

                        sprintf(status_information,"Other error.");
                        exitstatus=CRITICAL;

                        printf("%s: - %s | %s\n",exit_status[exitstatus],status_information);

                        return exitstatus;
                }
        }
//      printf("file st_mtime=%d\n",getstat.st_mtime);
//      printf("file st_ctime=%d\n",getstat.st_ctime);

        result=timestamp-getstat.st_mtime;
//      printf("now_time-st_mtime=%d\n",result);

//      ret=is_master_or_slave();

        ret=1;

        if(result>=istime) { 
                if(ret==1) {
                       // sprintf(status_information,"is Master, access.log Status=%d Second=%d",0,result);
                        sprintf(status_information,"mqsgip.log is %d seconds before modify, Second=%d",result,result);
                       // sprintf(performance_data,"Status=%d;;;; Second=%d;;;;",0,result);
                        sprintf(performance_data,"Second=%d;;;;",result);
                        exitstatus=CRITICAL;
                }
                else {
                       // sprintf(status_information,"is Slave, access.log Status=%d Second=%d",0,result);
                        sprintf(status_information,"mqsgip.log Second=%d",result);
                       // sprintf(performance_data,"Status=%d;;;; Second=%d;;;;",0,result);
                        sprintf(performance_data,"Second=%d;;;;",result);
                        exitstatus=OK;
                }
        }
        else {
                if(ret==1) {
                       // sprintf(status_information,"is Master, access.log Status=%d Second=%d",1,result);
                        sprintf(status_information,"mqsgip.log is %d seconds before modify, Second=%d",result,result);
                       // sprintf(performance_data,"Status=%d;;;; Second=%d;;;;",1,result);
                        sprintf(performance_data,"Second=%d;;;;",result);
                        exitstatus=OK;
                }
                else {
                       // sprintf(status_information,"is Slave, access.log Status=%d Second=%d",1,result);
                        sprintf(status_information,"mqsgip.log Second=%d",result);
                       // sprintf(performance_data,"Status=%d;;;; Second=%d;;;;",1,result);
                        sprintf(performance_data,"Second=%d;;;;",result);
                        exitstatus=OK;
                }
        }

        return 0;
}

int main() {
        int ret;

        int hour;
        char hour_str[LEN];

        struct tm *tp;

        timestamp=time(NULL);
//      printf("now time=%d\n",timestamp);

        tp=localtime(×tamp);
        sprintf(hour_str,"%d",tp->tm_hour);
        hour=atoi(hour_str);

//      printf("hour=%d\n",hour);

        if(hour>=1 || hour<=7) {
               // ret=diff_time(LONG_TIME);
                ret=diff_time(SHORT_TIME);
                if(ret!=0) {
                        fprintf(stderr,"diff_time(SHORT_TIME) error.\n");
                }
        }
        else {
                ret=diff_time(SHORT_TIME);
                if(ret!=0) {
                        fprintf(stderr,"diff_time(LONG_TIME) error.\n");
                }
        }

        printf("%s: %s | %s\n",exit_status[exitstatus],status_information,performance_data);

        return exitstatus;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值