IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Changeset 3212


Ignore:
Timestamp:
Feb 13, 2005, 9:37:58 PM (21 years ago)
Author:
eugene
Message:

pcontrol dev : hosts + jobs running

Location:
trunk/Ohana/src/opihi
Files:
1 added
18 edited

Legend:

Unmodified
Added
Removed
  • trunk/Ohana/src/opihi/cmd.basic/quit.c

    r2598 r3212  
    77  fprintf (stderr, "Goodbye!\n");
    88  cleanup ();
     9  fprintf (stderr, "Cleanup done!\n");
    910
    1011  state = 0;
  • trunk/Ohana/src/opihi/include/pcontrol.h

    r3203 r3212  
    110110static char *CONNECT;  /* connection method (ssh, rsh, etc) */
    111111static char *PCLIENT;  /* shell on remote host (eg, pclient) */
     112# define PCLIENT_PROMPT "pclient:"
    112113
    113114# define FREE(X) if (X != NULL) { free (X); }
     
    130131void AddHost (char *hostname);
    131132void DownHost (Host *host);
     133void OffHost (Host *host);
    132134void DelHost (Host *host);
    133135int CheckSystem ();
     
    149151int GetJobOutput (Job *job, char *channel);
    150152int ResetJob (Job *job);
    151 int PclientCommand (Host *host, char *command, IOBuffer *buffer);
     153int PclientCommand (Host *host, char *command, char *response, IOBuffer *buffer);
    152154int rconnect (char *command, char *hostname, char *shell, int *stdio);
    153155int CheckHost (Host *host);
  • trunk/Ohana/src/opihi/pclient/ChildOps.c

    r3211 r3212  
    3535  if (dtime < 0.0001) Nbad ++;
    3636  if (dtime > 0.01) Nbad = 0;
    37   if (Nbad > 10) {
    38     fprintf (stderr, "parent shutdown\n");
    39     exit (2);
    40   } 
     37  if (Nbad > 10) exit (2);
    4138
    4239  /* this is a bit lame : we must exit if calling process exits */
    4340  ppid = getppid();
    44   if (ppid == 1) {
    45     fprintf (stderr, "parent shutdown\n");
    46     exit (2);
    47   } 
     41  if (ppid == 1) exit (2);
    4842
    4943  CheckChildStatus ();
  • trunk/Ohana/src/opihi/pcontrol/CheckBusyJob.c

    r3203 r3212  
    1616  InitIOBuffer (&buffer, 0x100);
    1717
    18   status = PclientCommand (host, "status", &buffer);
     18  status = PclientCommand (host, "status", PCLIENT_PROMPT, &buffer);
    1919
    2020  /* check on success of pclient command */
     
    3434
    3535    case PCLIENT_GOOD:
    36       fprintf (stderr, "message received\n"); 
     36      fprintf (stderr, "message received (CheckBusyJob)\n"); 
    3737      break;
    3838
  • trunk/Ohana/src/opihi/pcontrol/CheckDoneHost.c

    r3203 r3212  
    99  InitIOBuffer (&buffer, 0x100);
    1010 
    11   status = PclientCommand (host, "reset", &buffer);
     11  status = PclientCommand (host, "reset", PCLIENT_PROMPT, &buffer);
    1212
    1313  /* check on success of pclient command */
     
    2727
    2828    case PCLIENT_GOOD:
    29       fprintf (stderr, "message received\n"); 
     29      fprintf (stderr, "message received (CheckDoneHost)\n"); 
    3030      break;
    3131
  • trunk/Ohana/src/opihi/pcontrol/CheckHost.c

    r3211 r3212  
    99  InitIOBuffer (&buffer, 0x100);
    1010
    11   status = PclientCommand (host, "echo OK", &buffer);
     11  status = PclientCommand (host, "echo OK", PCLIENT_PROMPT, &buffer);
    1212  switch (status) {
    1313    case 0:
  • trunk/Ohana/src/opihi/pcontrol/CheckSystem.c

    r3203 r3212  
    1111  /** add in different timescales for heartbeat? **/
    1212  CheckLiveHosts();
     13
     14  /* status (0, NULL); */
    1315}
    1416
     
    5456  for (i = 0; i < Nobject; i++) {
    5557    host = GetStack (stack, STACK_TOP);
    56     StartHost (host);
     58    CheckDoneHost (host);
    5759  }
    5860}
  • trunk/Ohana/src/opihi/pcontrol/GetJobOutput.c

    r3203 r3212  
    2020  /** must have a valid host : if not, move to pending? **/
    2121  host = job[0].host;
    22   status = PclientCommand (host, channel, buffer);
     22  status = PclientCommand (host, channel, PCLIENT_PROMPT, buffer);
    2323
    2424  /* check on success of pclient command */
     
    3737
    3838    case PCLIENT_GOOD:
    39       fprintf (stderr, "message received\n"); 
     39      fprintf (stderr, "message received (GetJobOutput : %s)\n", channel); 
    4040      return (TRUE);
    4141
  • trunk/Ohana/src/opihi/pcontrol/HostOps.c

    r3204 r3212  
    3737int PutHost (Host *host, int StackID, int where) {
    3838
    39   int status;
     39  int stat;
    4040  Stack *stack;
    4141
     
    4444
    4545  host[0].stack = StackID;
    46   status = PutStack (stack, where, host);
    47   return (status);
     46  stat = PutStack (stack, where, host);
     47  /* status (0, NULL); */
     48  return (stat);
    4849}
    4950 
     
    7071
    7172  for (i = 0; i < stack[0].Nobject; i++) {
    72     host = (Host *) stack[0].object;
     73    host = (Host *) stack[0].object[i];
    7374    if (host[0].HostID == HostID) {
    7475      return (i);
     
    8889
    8990  for (i = 0; i < stack[0].Nobject; i++) {
    90     host = (Host *) stack[0].object;
     91    host = (Host *) stack[0].object[i];
    9192    if (!strcasecmp (host[0].hostname, name)) {
    9293      return (i);
     
    113114}
    114115
    115 void DownHost (Host *host) {
    116 
    117   CLOSE (host[0].stdin);
    118   CLOSE (host[0].stdout);
    119   CLOSE (host[0].stderr);
    120   host[0].job = NULL;
    121   PutHost (host, PCONTROL_HOST_DOWN, STACK_BOTTOM);
    122 }
    123 
    124116void DelHost (Host *host) {
    125117  FREE (host[0].hostname);
  • trunk/Ohana/src/opihi/pcontrol/JobOps.c

    r3204 r3212  
    3737int PutJob (Job *job, int StackID, int where) {
    3838
    39   int status;
     39  int stat;
    4040  Stack *stack;
    4141
     
    4646  job[0].state = StackID;
    4747  job[0].stack = StackID;
    48   status = PutStack (stack, where, job);
    49   return (status);
     48  stat = PutStack (stack, where, job);
     49  /* status (0, NULL); */
     50  return (stat);
    5051}
    5152 
     
    7273
    7374  for (i = 0; i < stack[0].Nobject; i++) {
    74     job = (Job *) stack[0].object;
     75    job = (Job *) stack[0].object[i];
    7576    if (job[0].JobID == JobID) {
    7677      return (i);
     
    163164
    164165void LinkJobAndHost (Job *job, Host *host) {
     166  int N;
     167
    165168  job[0].host = host;
    166169  host[0].job = job;
     170
     171# if (0)
     172  /*** need to pop host off of correct stack XXX ***/
     173  N = FindHost (host[0].HostID, host[0].stack);
     174  if (N < 0) {
     175    fprintf (stderr, "programming error: host is not found in current stack\n");
     176    exit (2);
     177  }
     178  host = GetHost (host[0].stack, N);
     179# endif
     180
     181  /*** need to pop job off of correct stack XXX ***/
     182  N = FindJob (job[0].JobID, job[0].stack);
     183  if (N < 0) {
     184    fprintf (stderr, "programming error: job is not found in current stack\n");
     185    exit (2);
     186  }
     187  job = GetJob (job[0].stack, N);
     188
     189  /*** this is fairly crazy : the only reason this works is cause I
     190       get the same host ptr here and in CheckIdleHost
     191  ***/
    167192}
  • trunk/Ohana/src/opihi/pcontrol/Makefile

    r3203 r3212  
    4545$(SDIR)/ResetJob.$(ARCH).o \
    4646$(SDIR)/StartHost.$(ARCH).o \
     47$(SDIR)/StopHosts.$(ARCH).o \
    4748$(SDIR)/StartJob.$(ARCH).o
    4849
  • trunk/Ohana/src/opihi/pcontrol/ResetJob.c

    r3203 r3212  
    1515  job[0].Reset = TRUE;
    1616
    17   status = PclientCommand (host, "reset", &buffer);
     17  status = PclientCommand (host, "reset", PCLIENT_PROMPT, &buffer);
    1818
    1919  /* check on success of pclient command */
     
    3232
    3333    case PCLIENT_GOOD:
    34       fprintf (stderr, "message received\n"); 
     34      fprintf (stderr, "message received (ResetJob)\n"); 
    3535      FreeIOBuffer (&buffer);
    3636      return (TRUE);
  • trunk/Ohana/src/opihi/pcontrol/StartJob.c

    r3203 r3212  
    3030  }
    3131
    32   status = PclientCommand (host, line, &buffer);
     32  status = PclientCommand (host, line, PCLIENT_PROMPT, &buffer);
    3333  free (line);
    3434
     
    4444
    4545    case PCLIENT_GOOD:
    46       fprintf (stderr, "message received\n"); 
     46      fprintf (stderr, "message received (StartJob)\n"); 
    4747      break;
    4848
  • trunk/Ohana/src/opihi/pcontrol/host.c

    r3204 r3212  
    33int host (int argc, char **argv) {
    44
    5   int N, Delete, Off, On;
     5  int N, Delete, Off, On, Start, Stop, Check;
    66  Host *host;
    77
     
    2626  /* this section needs some help: find the specified host in the stacks */
    2727  On = FALSE;
    28   if ((N = get_argument (argc, argv, "-off"))) {
     28  if ((N = get_argument (argc, argv, "-on"))) {
    2929    if (Delete || Off) {
    3030      fprintf (stderr, "only one of -delete, -off, -on\n");
     
    3535  }
    3636 
    37   if (argc < 2) {
     37  /* this section needs some help: find the specified host in the stacks */
     38  Start = FALSE;
     39  if ((N = get_argument (argc, argv, "-start"))) {
     40    remove_argument (N, &argc, argv);
     41    Start = TRUE;
     42  }
     43 
     44  /* this section needs some help: find the specified host in the stacks */
     45  Check = FALSE;
     46  if ((N = get_argument (argc, argv, "-check"))) {
     47    remove_argument (N, &argc, argv);
     48    Check = TRUE;
     49  }
     50 
     51  /* this section needs some help: find the specified host in the stacks */
     52  Stop = FALSE;
     53  if ((N = get_argument (argc, argv, "-stop"))) {
     54    remove_argument (N, &argc, argv);
     55    Stop = TRUE;
     56  }
     57 
     58  if (argc != 2) {
    3859    fprintf (stderr, "USAGE: host (hostname) [-delete]\n");
    3960    return (FALSE);
     
    6283  }
    6384
     85  if (Check) {
     86    N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
     87    if (N >= 0) {
     88      host = GetHost (PCONTROL_HOST_IDLE, N);
     89      CheckHost (host);
     90      return (TRUE);
     91    }
     92    N = FindNamedHost (argv[1], PCONTROL_HOST_BUSY);
     93    if (N >= 0) {
     94      host = GetHost (PCONTROL_HOST_BUSY, N);
     95      CheckHost (host);
     96      return (TRUE);
     97    }
     98    fprintf (stderr, "host %s is not BUSY or IDLE\n", argv[1]);
     99    return (FALSE);
     100  }
     101
     102  if (Start) {
     103    N = FindNamedHost (argv[1], PCONTROL_HOST_DOWN);
     104    if (N < 0) {
     105      fprintf (stderr, "host %s is not DOWN\n", argv[1]);
     106      return (FALSE);
     107    }
     108    host = GetHost (PCONTROL_HOST_DOWN, N);
     109    StartHost (host);
     110    return (TRUE);
     111  }
     112  if (Stop) {
     113    N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
     114    if (N < 0) {
     115      fprintf (stderr, "host %s is not IDLE\n", argv[1]);
     116      return (FALSE);
     117    }
     118    host = GetHost (PCONTROL_HOST_IDLE, N);
     119    StopHost (host);
     120    DownHost (host);
     121    return (TRUE);
     122  }
     123
    64124  if (Off) {
    65125    N = FindNamedHost (argv[1], PCONTROL_HOST_IDLE);
    66126    if (N >= 0) {
    67127      host = GetHost (PCONTROL_HOST_IDLE, N);
    68       CLOSE (host[0].stdin);
    69       CLOSE (host[0].stdout);
    70       CLOSE (host[0].stderr);
    71       PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
     128      StopHost (host);
     129      OffHost (host);
    72130      return (TRUE);
    73131    }
     
    75133    if (N >= 0) {
    76134      host = GetHost (PCONTROL_HOST_DOWN, N);
    77       PutHost (host, PCONTROL_HOST_OFF, STACK_BOTTOM);
     135      OffHost (host);
    78136      return (TRUE);
    79137    }
  • trunk/Ohana/src/opihi/pcontrol/job.c

    r3203 r3212  
    4848  JobID = AddJob (Host, Mode, Timeout, targc, targv);
    4949  FREE (Host);
    50 
    51   fprintf (stdout, "STATUS %d\n", JobID);
    5250  return (TRUE);
    53 
    5451}
  • trunk/Ohana/src/opihi/pcontrol/pclient.c

    r3211 r3212  
    11# include "pcontrol.h"
     2# define PCLIENT_TIMEOUT 20
    23
    3 # define PCLIENT_TIMEOUT 20
    4 # define PCLIENT_PROMPT "pclient:"
    5 
    6 int PclientCommand (Host *host, char *command, IOBuffer *buffer) {
     4int PclientCommand (Host *host, char *command, char *response, IOBuffer *buffer) {
    75
    86  int i;
     
    108  char *line;
    119
     10  ReadtoIOBuffer (buffer, host[0].stdout);
     11  FlushIOBuffer (buffer);
     12
    1213  /* send command to client (adding on \n) */
    13   fprintf (stderr, "send: %s (%d)\n", command, buffer[0].Nbuffer);
     14  /* fprintf (stderr, "send: %s (%d)\n", command, buffer[0].Nbuffer); */
    1415  ALLOCATE (line, char, MAX (1, strlen(command)));
    1516  sprintf (line, "%s\n", command);
     
    2526  for (i = 0; (i < PCLIENT_TIMEOUT) && (status == -1) && (line == NULL); i++) {
    2627    status = ReadtoIOBuffer (buffer, host[0].stdout);
    27     line = memstr (buffer[0].buffer, PCLIENT_PROMPT, buffer[0].Nbuffer);
     28    line = memstr (buffer[0].buffer, response, buffer[0].Nbuffer);
     29    if (status == -1) usleep (10000);
    2830  }
    2931  if (status ==  0) return (PCLIENT_DOWN);
    3032  if (status == -1) return (PCLIENT_HUNG);
    31   fprintf (stderr, "buffer.buffer: %s\n", buffer[0].buffer);
     33  /* fprintf (stderr, "buffer.buffer: %s\n", buffer[0].buffer); */
    3234  return (PCLIENT_GOOD);
    3335}
  • trunk/Ohana/src/opihi/pcontrol/pcontrol.c

    r3203 r3212  
    4545  rl_attempted_completion_function = command_completer;
    4646  rl_event_hook = CheckSystem;
     47  /* rl_set_keyboard_input_timeout (2000000);  */
    4748
    4849  set_str_variable ("HISTORY", opihi_history);
     
    5758/* add program-dependent exit functions here */
    5859void cleanup () {
     60  DownHosts ();
    5961  return;
    6062}
  • trunk/Ohana/src/opihi/pcontrol/status.c

    r3203 r3212  
    11# include "pcontrol.h"
     2char jobname[6][32] = {"PENDING", "BUSY", "EXIT", "CRASH", "HUNG", "DONE"};
     3char hostname[5][32] = {"IDLE", "BUSY", "DOWN", "DONE", "OFF"};
    24
    35int status (int argc, char **argv) {
     
    2830  stack = GetJobStack (Nstack);
    2931  Nobject = stack[0].Nobject;
    30   fprintf (stderr, "job stack %d:  %d objects\n", Nstack, Nobject);
     32  fprintf (stderr, "job stack %s:  %d objects\n", jobname[Nstack], Nobject);
    3133
    3234  for (i = 0; i < Nobject; i++) {
     
    4951  stack = GetHostStack (Nstack);
    5052  Nobject = stack[0].Nobject;
    51   fprintf (stderr, "host stack %d:  %d objects\n", Nstack, Nobject);
     53  fprintf (stderr, "host stack %s:  %d objects\n", hostname[Nstack], Nobject);
    5254
    5355  for (i = 0; i < Nobject; i++) {
Note: See TracChangeset for help on using the changeset viewer.