Skip to content
Snippets Groups Projects
Commit 7df1e682 authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

adapt to new state format

parent e1717952
No related branches found
No related tags found
No related merge requests found
......@@ -31,13 +31,14 @@
#include <66/utils.h>
#include <66/constants.h>
#include <66/state.h>
#include <66/config.h>
#define MAXOPTS 7
#define MAXOPTS 11
static wchar_t const field_suffix[] = L" :" ;
static char fields[INFO_NKEY][INFO_FIELD_MAXLEN] = {{ 0 }} ;
#define USAGE "66-instate [ -h ] [ -z ] [ -t tree ] [ -l ] service"
#define USAGE "66-instate [ -h ] [ -v verbosity ] [ -z ] service"
static inline void info_help (void)
{
......@@ -49,7 +50,6 @@ static inline void info_help (void)
" -h: print this help\n"
" -z: use color\n"
" -t: only search service at the specified tree\n"
" -l: prints information of the associated logger if exist\n"
;
log_info(USAGE,"\n",help) ;
......@@ -86,27 +86,27 @@ static void info_display_int(char const *field,unsigned int id)
int main(int argc, char const *const *argv)
{
int found = 0 ;
uint8_t logger = 0 ;
resolve_service_t res = RESOLVE_SERVICE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_SERVICE, &res) ;
stralloc satree = STRALLOC_ZERO ;
stralloc src = STRALLOC_ZERO ;
stralloc tmp = STRALLOC_ZERO ;
char base[SS_MAX_PATH + 1] ;
ss_state_t sta = STATE_ZERO ;
char const *tname = 0 ;
char const *svname = 0 ;
char const *ste = 0 ;
char atree[SS_MAX_TREENAME + 1] ;
log_color = &log_color_disable ;
char buf[MAXOPTS][INFO_FIELD_MAXLEN] = {
"Reload",
"Init",
"Unsupervise",
"State",
"Pid",
"Name" ,
"Real_logger_name" } ;
"toinit",
"toreload",
"torestart",
"tounsupervise",
"isdownfile",
"isearlier" ,
"isenabled" ,
"isparsed" ,
"issupervised",
"isup" } ;
PROG = "66-instate" ;
{
......@@ -114,16 +114,35 @@ int main(int argc, char const *const *argv)
for (;;)
{
int opt = getopt_args(argc,argv, ">hzlt:", &l) ;
int opt = getopt_args(argc,argv, ">hv:zt:", &l) ;
if (opt == -1) break ;
if (opt == -2) log_die(LOG_EXIT_USER,"options must be set first") ;
switch (opt)
{
case 'h' : info_help(); return 0 ;
case 'z' : log_color = !isatty(1) ? &log_color_disable : &log_color_enable ; break ;
case 't' : tname = l.arg ; break ;
case 'l' : logger = 1 ; break ;
default : log_usage(USAGE) ;
case 'h' :
info_help();
return 0 ;
case 'v' :
if (!uint0_scan(l.arg, &VERBOSITY))
log_usage(USAGE) ;
break ;
case 'z' :
log_color = !isatty(1) ? &log_color_disable : &log_color_enable ;
break ;
case 't' :
log_1_warn("deprecated option -t -- ignore it") ;
break ;
default :
log_usage(USAGE) ;
}
}
argc -= l.ind ; argv += l.ind ;
......@@ -132,55 +151,33 @@ int main(int argc, char const *const *argv)
if (!argc) log_usage(USAGE) ;
svname = *argv ;
found = service_intree(&src,svname,tname) ;
if (found == -1) log_dieu(LOG_EXIT_SYS,"resolve tree source of sv: ",svname) ;
else if (!found) {
log_info("no tree exist yet") ;
goto freed ;
}
else if (found > 2) {
log_die(LOG_EXIT_SYS,svname," is set on different tree -- please use -t options") ;
}
else if (found == 1) log_die(LOG_EXIT_SYS,"unknown service: ",svname) ;
if (!set_ownersysdir_stack(base, getuid()))
log_dieu(LOG_EXIT_SYS, "set owner directory") ;
if (!resolve_read(wres,src.s,svname)) log_dieusys(111,"read resolve file of: ",src.s,"/.resolve/",svname) ;
found = service_is_g(atree, svname, STATE_FLAGS_ISPARSED) ;
if (found == -1)
log_dieusys(LOG_EXIT_SYS, "get information of service: ", svname, " -- please a bug report") ;
else if (!found)
log_die(LOG_EXIT_USER, "unknown service: ", svname) ;
info_field_align(buf,fields,field_suffix,MAXOPTS) ;
ste = res.sa.s + res.state ;
if (!state_check(ste,svname)) log_diesys(111,"unitialized service: ",svname) ;
if (!state_read(&sta,ste,svname)) log_dieusys(111,"read state file of: ",ste,"/",svname) ;
if (!state_check(base, svname)) log_diesys(111,"unitialized service: ",svname) ;
if (!state_read(&sta, base, svname)) log_dieusys(111,"read state file of: ",ste,"/",svname) ;
info_display_string(fields[5],svname) ;
info_display_int(fields[0],sta.reload) ;
info_display_int(fields[1],sta.init) ;
info_display_int(fields[2],sta.unsupervise) ;
info_display_int(fields[3],sta.state) ;
info_display_int(fields[4],sta.pid) ;
info_display_int(fields[0],sta.toinit) ;
info_display_int(fields[1],sta.toreload) ;
info_display_int(fields[2],sta.torestart) ;
info_display_int(fields[3],sta.tounsupervise) ;
info_display_int(fields[4],sta.isdownfile) ;
info_display_int(fields[5],sta.isearlier) ;
info_display_int(fields[6],sta.isenabled) ;
info_display_int(fields[7],sta.isparsed) ;
info_display_int(fields[8],sta.issupervised) ;
info_display_int(fields[9],sta.isup) ;
if (res.logger && logger)
{
svname = res.sa.s + res.logger ;
if (!state_check(ste,svname)) log_dieusys(111,"unitialized: ",svname) ;
if (!state_read(&sta,ste,svname)) log_dieusys(111,"read state file of: ",ste,"/",svname) ;
if (buffer_putsflush(buffer_1,"\n") == -1)
log_dieusys(LOG_EXIT_SYS,"write to stdout") ;
info_display_string(fields[6],res.sa.s + res.logreal) ;
info_display_int(fields[0],sta.reload) ;
info_display_int(fields[1],sta.init) ;
info_display_int(fields[2],sta.unsupervise) ;
info_display_int(fields[3],sta.state) ;
info_display_int(fields[4],sta.pid) ;
}
freed:
resolve_free(wres) ;
stralloc_free(&satree) ;
stralloc_free(&src) ;
stralloc_free(&tmp) ;
return 0 ;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment