Esempio n. 1
0
void s6_svstatus_unpack (char const *pack, s6_svstatus_t *sv)
{
  uint64 pid ;
  uint16 wstat ;
  tain_unpack(pack, &sv->stamp) ;
  tain_unpack(pack + 12, &sv->readystamp) ;
  uint64_unpack_big(pack + 24, &pid) ;
  sv->pid = (pid_t)pid ;
  uint16_unpack_big(pack + 32, &wstat) ;
  sv->wstat = (int)wstat ;
  sv->flagpaused = pack[34] & 1 ;
  sv->flagfinishing = !!(pack[34] & 2) ;
  sv->flagwant = !!(pack[34] & 4) ;
  sv->flagwantup = !!(pack[34] & 8) ;
  sv->flagready = !!(pack[34] & 16) ;
}
Esempio n. 2
0
int
aa_service_status_read (aa_service_status *svst, const char *dir)
{
    size_t len = strlen (dir);
    char file[len + 1 + sizeof (AA_SVST_FILENAME)];
    uint32_t u;

    /* most cases should be w/out a message, so we'll only need FIXED_SIZE and
     * one extra byte to NUL-terminate the (empty) message */
    if (!stralloc_ready_tuned (&svst->sa, AA_SVST_FIXED_SIZE + 1, 0, 0, 1))
        return -1;

    byte_copy (file, len, dir);
    byte_copy (file + len, 1 + sizeof (AA_SVST_FILENAME), "/" AA_SVST_FILENAME);

    if (!openreadfileclose (file, &svst->sa, AA_SVST_FIXED_SIZE + AA_SVST_MAX_MSG_SIZE)
            || svst->sa.len < AA_SVST_FIXED_SIZE)
    {
        int e = errno;
        tain_now_g ();
        errno = e;
        return -1;
    }
    tain_now_g ();

    if (svst->sa.len >= svst->sa.a
            && !stralloc_ready_tuned (&svst->sa, svst->sa.len + 1, 0, 0, 1))
        return -1;
    svst->sa.s[svst->sa.len] = '\0';
    svst->sa.len++;

    tain_unpack (svst->sa.s, &svst->stamp);
    uint32_unpack (svst->sa.s + 12, &u);
    svst->event = (unsigned int) u;
    uint32_unpack (svst->sa.s + 16, &u);
    svst->code = (int) u;

    return 0;
}
Esempio n. 3
0
int main (void)
{
  char buf[TAIN_PACK] ;
  tain_t now, adj ;
  localtmn_t l ;
  char fmt[LOCALTMN_FMT] ;
  PROG = "s6-clockview" ;

  if (allread(0, buf, TAIN_PACK) < TAIN_PACK) strerr_diefu1sys(111, "read from stdin") ;
  tain_unpack(buf, &adj) ;
  if (!sysclock_get(&now)) strerr_diefu1sys(111, "sysclock_get") ;
  if (!localtmn_from_sysclock(&l, &now, 1)) strerr_diefu1sys(111, "localtmn_from_sysclock") ;
  if (buffer_puts(buffer_1, "before: ") < 0) goto fail ;
  if (buffer_put(buffer_1, fmt, localtmn_fmt(fmt, &l)) < 0) goto fail ;
  tain_add(&now, &now, &adj) ;
  if (!localtmn_from_sysclock(&l, &now, 1)) strerr_diefu1sys(111, "localtmn_from_sysclock") ;
  if (buffer_puts(buffer_1, "\nafter:  ") < 0) goto fail ;
  if (buffer_put(buffer_1, fmt, localtmn_fmt(fmt, &l)) < 0) goto fail ;
  if (buffer_putflush(buffer_1, "\n", 1) < 0) goto fail ;
  return 0 ;
 fail:
  strerr_diefu1sys(111, "write to stdout") ;
}
Esempio n. 4
0
static
void
report(const char *name, const uchar_t *status, const tain_t *now)
{
  pid_t    pid;
  tain_t   when;
  uint64_t uptime;
  uchar_t  flags;
  int      haslog;
  char     nbuf[NFMT_SIZE];

  /* svdef: */
  tain_unpack(&when, &status[16]);
  flags = status[28];
  haslog = (flags & SVDEF_FLAG_HASLOG) ? 1 : 0;

  /* uptime since activation: */
  uptime = tain_uptime(now, &when);
  vputs(name, ": activated ", nfmt_uint64(nbuf, uptime), " seconds");
  if(flags & SVDEF_FLAG_CULL){
      vputs(", deactivation in progress");
  }
  if(flags & SVDEF_FLAG_CYCLE){
      vputs(", flagged for reactivation");
  }
  vputs("\n");

  /* main: */
  pid = upak32_unpack(&status[30]); 
  tain_unpack(&when, &status[34]);
  flags = status[46];
  uptime = tain_uptime(now, &when);
  vputs("  main: ");
  if(pid == 0){
      vputs("down ", nfmt_uint64(nbuf, uptime), " seconds");
      if(!(flags & SUBSV_FLAG_WANTDOWN)) vputs(", want up!");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }else if((uptime < 1) && !(flags & SUBSV_FLAG_ISRESET)){
      /* munge uptime < 1 second to want up: */
      vputs("down, want up!");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }else{
      vputs((flags & SUBSV_FLAG_ISRESET) ? "resetting " : "up ");
      vputs(nfmt_uint64(nbuf, uptime), " seconds");
      vputs(" (pid ", nfmt_uint32(nbuf, (uint32_t)pid), ")");
      if(flags & SUBSV_FLAG_ISPAUSED) vputs(", paused");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }

  /* log: */
  vputs("\n   log: ");
  if(!haslog){
      vputs("(no log)\n");
      return;
  }

  /* else: */
  pid = upak32_unpack(&status[48]);
  tain_unpack(&when, &status[52]);
  flags = status[64];
  uptime = tain_uptime(now, &when);
  if(pid == 0){
      vputs("down ", nfmt_uint64(nbuf, uptime), " seconds");
      if(!(flags & SUBSV_FLAG_WANTDOWN)) vputs(", want up!");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }else if((uptime < 1) && !(flags & SUBSV_FLAG_ISRESET)){
      /* munge uptime < 1 second to want up: */
      vputs("down, want up!");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }else{
      vputs((flags & SUBSV_FLAG_ISRESET) ? "resetting " : "up ");
      vputs(nfmt_uint64(nbuf, uptime), " seconds");
      vputs(" (pid ", nfmt_uint32(nbuf, (uint32_t)pid), ")");
      if(flags & SUBSV_FLAG_ISPAUSED) vputs(", paused");
      if(flags & SUBSV_FLAG_ISONCE) vputs(", flagged once");
  }
  vputs("\n");

  return;
}