daeonizing
This commit is contained in:
parent
e173906cdf
commit
9fcaa5cfcb
68
main.c
68
main.c
@ -11,19 +11,6 @@
|
|||||||
|
|
||||||
#define HELP_TEXT "requires a command\n--\ngetSendStatus [objectpath]\nlistUnits\nconfig [configfile]\nset token with GOTIFY_TOKEN=\"sjdfoiasfd\"\n--\n"
|
#define HELP_TEXT "requires a command\n--\ngetSendStatus [objectpath]\nlistUnits\nconfig [configfile]\nset token with GOTIFY_TOKEN=\"sjdfoiasfd\"\n--\n"
|
||||||
|
|
||||||
int gotify_message(char *,char *,char *);
|
|
||||||
int systemdCall(DBusConnection *,char *, char *);
|
|
||||||
int checkIsActive(DBusConnection *connection, char *service_name);
|
|
||||||
int systemdUnitCall(DBusConnection *connection,char *target,char *method,char *param,char **result);
|
|
||||||
int GetSendStatus(DBusConnection *connection,char *objectpath);
|
|
||||||
int checkState(char *ServiceName,char *result);
|
|
||||||
|
|
||||||
/*
|
|
||||||
*sytemctl show gotify-server | grep PID
|
|
||||||
*sudo busctl tree org.freedesktop.systemd1 > get object paths
|
|
||||||
//org/freedesktop/systemd1
|
|
||||||
//gotify_message("https://5ccppi.org:4433/message?token=","anothertitle","anothermessage");
|
|
||||||
* */
|
|
||||||
typedef struct service
|
typedef struct service
|
||||||
{
|
{
|
||||||
char *name;
|
char *name;
|
||||||
@ -32,6 +19,22 @@ typedef struct service
|
|||||||
int priority;
|
int priority;
|
||||||
} Service;
|
} Service;
|
||||||
|
|
||||||
|
int gotify_message(char *,char *,char *);
|
||||||
|
int systemdCall(DBusConnection *,char *, char *);
|
||||||
|
int checkIsActive(DBusConnection *connection, char *service_name);
|
||||||
|
int systemdUnitCall(DBusConnection *connection,char *target,char *method,char *param,char **result);
|
||||||
|
int GetSendStatus(DBusConnection *connection,char *objectpath);
|
||||||
|
int ServiceGetSendStatus(DBusConnection *connection,Service *service);
|
||||||
|
int checkState(char *ServiceName,char *result,Service *service);
|
||||||
|
|
||||||
|
/*
|
||||||
|
*sytemctl show gotify-server | grep PID
|
||||||
|
*sudo busctl tree org.freedesktop.systemd1 > get object paths
|
||||||
|
//org/freedesktop/systemd1
|
||||||
|
//gotify_message("https://5ccppi.org:4433/message?token=","anothertitle","anothermessage");
|
||||||
|
* */
|
||||||
|
|
||||||
|
|
||||||
int main(int argc,char *argv[])
|
int main(int argc,char *argv[])
|
||||||
{
|
{
|
||||||
DBusConnection *connection=NULL;
|
DBusConnection *connection=NULL;
|
||||||
@ -96,7 +99,7 @@ int main(int argc,char *argv[])
|
|||||||
printf("Running as a daemon\n");
|
printf("Running as a daemon\n");
|
||||||
char *str_entry[64]={'\0'};
|
char *str_entry[64]={'\0'};
|
||||||
int i=0;
|
int i=0;
|
||||||
Service services[64];
|
Service services[64]={'\0'};
|
||||||
char *ptr_name=NULL;
|
char *ptr_name=NULL;
|
||||||
|
|
||||||
loadConfig(argv[2],str_entry,64);
|
loadConfig(argv[2],str_entry,64);
|
||||||
@ -106,7 +109,6 @@ int main(int argc,char *argv[])
|
|||||||
ptr_name = strrchr(services[i].targetPath,'/');
|
ptr_name = strrchr(services[i].targetPath,'/');
|
||||||
if(ptr_name!=NULL)
|
if(ptr_name!=NULL)
|
||||||
{
|
{
|
||||||
printf("strrchr:%s\n",ptr_name);
|
|
||||||
services[i].name = strdup(ptr_name);
|
services[i].name = strdup(ptr_name);
|
||||||
services[i].name = services[i].name + 1;
|
services[i].name = services[i].name + 1;
|
||||||
}
|
}
|
||||||
@ -120,10 +122,10 @@ int main(int argc,char *argv[])
|
|||||||
}
|
}
|
||||||
while(true)
|
while(true)
|
||||||
{
|
{
|
||||||
for(i=0;str_entry[i];i++)
|
for(i=0;services[i].name;i++)
|
||||||
{
|
{
|
||||||
printf("entry in config:%s\n",str_entry[i]);
|
printf("entry in config:%s\n",services[i].name);
|
||||||
GetSendStatus(connection,str_entry[i]);
|
ServiceGetSendStatus(connection,&services[i]);
|
||||||
}
|
}
|
||||||
sleep(10);
|
sleep(10);
|
||||||
}
|
}
|
||||||
@ -200,7 +202,21 @@ int GetSendStatus(DBusConnection *connection,char *objectpath)
|
|||||||
int ret = systemdUnitCall(connection,objectpath,"Get","SubState",&result);
|
int ret = systemdUnitCall(connection,objectpath,"Get","SubState",&result);
|
||||||
if(ret == 0)
|
if(ret == 0)
|
||||||
{
|
{
|
||||||
checkState(objectpath,result);
|
//checkState(objectpath,result,NULL);
|
||||||
|
} else
|
||||||
|
{
|
||||||
|
fprintf(stderr,"could not call systemdunit\n");
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
int ServiceGetSendStatus(DBusConnection *connection,Service *service)
|
||||||
|
{
|
||||||
|
char *result=0;
|
||||||
|
char *objectpath = service->targetPath;
|
||||||
|
int ret = systemdUnitCall(connection,objectpath,"Get","SubState",&result);
|
||||||
|
if(ret == 0)
|
||||||
|
{
|
||||||
|
checkState(service->name,result,service);
|
||||||
} else
|
} else
|
||||||
{
|
{
|
||||||
fprintf(stderr,"could not call systemdunit\n");
|
fprintf(stderr,"could not call systemdunit\n");
|
||||||
@ -208,7 +224,7 @@ int GetSendStatus(DBusConnection *connection,char *objectpath)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int checkState(char *ServiceName,char *result)
|
int checkState(char *ServiceName,char *result,Service *service)
|
||||||
{
|
{
|
||||||
int i=0;
|
int i=0;
|
||||||
char *error_strings[]={"dead","inactive","exited"};
|
char *error_strings[]={"dead","inactive","exited"};
|
||||||
@ -216,15 +232,21 @@ int checkState(char *ServiceName,char *result)
|
|||||||
for(i=0;i<(sizeof(error_strings)/sizeof(error_strings[0]));i++)
|
for(i=0;i<(sizeof(error_strings)/sizeof(error_strings[0]));i++)
|
||||||
{
|
{
|
||||||
//printf("%s %ld\n",error_strings[i],sizeof(error_strings)/sizeof(error_strings[0]));
|
//printf("%s %ld\n",error_strings[i],sizeof(error_strings)/sizeof(error_strings[0]));
|
||||||
if(strcmp(result,error_strings[i])==0)
|
if(strcmp(result,error_strings[i])==0 && service->alerted == false)
|
||||||
{
|
{
|
||||||
|
service->alerted=true;
|
||||||
gotify_message("https://5ccppi.org:4433",ServiceName,"is not running");
|
gotify_message("https://5ccppi.org:4433",ServiceName,"is not running");
|
||||||
printf("!!system unit died!! Alert gotify server!\n");
|
printf("!!system unit died!! Alert gotify server!\n");
|
||||||
}
|
}
|
||||||
else if(strcmp(result,"active")==0)
|
else if(strcmp(result,"active")==0)
|
||||||
{
|
{
|
||||||
printf("!!service seems okay!!\n");
|
if(service->alerted == true)
|
||||||
return 0;
|
{
|
||||||
|
gotify_message("https://5ccppi.org:4433",ServiceName,"Running again, after crash");
|
||||||
|
}
|
||||||
|
service->alerted=false;
|
||||||
|
printf("!!service seems okay!!\n");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
Loading…
Reference in New Issue
Block a user