Example #1
0
/*-------------------------------------------------------------------------*/
static Boolean qmonCkptGetAsk(
    lListElem *ckp
) {
    String ckpt_name = NULL;
    String ckpt_interface = NULL;
    String ckpt_ckpt_command = NULL;
    String ckpt_migr_command = NULL;
    String ckpt_rest_command = NULL;
    String ckpt_clean_command = NULL;
    String ckpt_ckpt_dir = NULL;
    String ckpt_signal = NULL;
    int state;
    int i;
    char ckpt_when[20];
    static String ckpt_when_strings[] = {
        "s",  /* shutdown of execd    */
        "m",  /* minimum CPU interval */
        "x",  /* suspend of Job       */
        "r"   /* reschedule job       */
    };

    DENTER(GUI_LAYER, "qmonCkptGetAsk");

    if (!ckp) {
        DEXIT;
        return False;
    }

    ckpt_name = XmtInputFieldGetString(ckpt_name_w);
    if (!ckpt_name || ckpt_name[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint name required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_name, qmon_trim(ckpt_name));

    state = XmtChooserGetState(ckpt_interface_w);
    ckpt_interface = ckpt_interface_types[state];
    if (!ckpt_interface || ckpt_interface[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint interface required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_interface, ckpt_interface);

    ckpt_ckpt_command = XmtInputFieldGetString(ckpt_ckpt_command_w);
    if (!ckpt_ckpt_command || ckpt_ckpt_command[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint ckpt_command required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_ckpt_command, ckpt_ckpt_command);


    ckpt_migr_command = XmtInputFieldGetString(ckpt_migr_command_w);
    if (!ckpt_migr_command || ckpt_migr_command[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint migr_command required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_migr_command, ckpt_migr_command);

    ckpt_rest_command = XmtInputFieldGetString(ckpt_rest_command_w);
    if (!ckpt_rest_command || ckpt_rest_command[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint rest_command required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_rest_command, ckpt_rest_command);

    ckpt_clean_command = XmtInputFieldGetString(ckpt_clean_command_w);
    if (!ckpt_clean_command || ckpt_clean_command[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint clean_command required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_clean_command, ckpt_clean_command);

    ckpt_ckpt_dir = XmtInputFieldGetString(ckpt_ckpt_dir_w);
    if (!ckpt_ckpt_dir || ckpt_ckpt_dir[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint ckpt_dir required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_ckpt_dir, ckpt_ckpt_dir);

    state = XmtChooserGetState(ckpt_when_w);
    strcpy(ckpt_when, "");
    for (i=0; i<XtNumber(ckpt_when_strings); i++) {
        if (state & (1<<i))
            strcat(ckpt_when, ckpt_when_strings[i]);
    }
    if (ckpt_when[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint when required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_when, ckpt_when);

    ckpt_signal = XmtInputFieldGetString(ckpt_signal_w);
    if (!ckpt_signal || ckpt_signal[0] == '\0') {
        qmonMessageShow(ckpt_ask_layout, True, "Checkpoint signal required !");
        DEXIT;
        return False;
    }
    lSetString(ckp, CK_signal, ckpt_signal);

    DEXIT;
    return True;
}
Example #2
0
/*-------------------------------------------------------------------------*/
static Boolean qmonSchedGet(lListElem *sep) {
   int job_info;
   lList *alp = NULL;
   String str;
   char buf[BUFSIZ];

   DENTER(GUI_LAYER, "qmonSchedGet");

   if (!sep) {
      goto error_exit;
   }

   /*
   ** get entries from dialog
   */
   XmtDialogGetDialogValues(qmon_sconf, &data);

/**
printf("<-data.algorithm: '%s'\n", data.algorithm ? data.algorithm : "-NA-");
printf("<-data.schedule_interval: '%s'\n", data.schedule_interval ? data.schedule_interval : "-NA-");
printf("<-data.sc_params: '%s'\n", data.sc_params ? data.sc_params : "-NA-");
printf("<-data.maxujobs: '%d'\n", data.maxujobs );
printf("<-data.flush_submit_secs: '%d'\n", data.flush_submit_secs );
printf("<-data.flush_finish_secs: '%d'\n", data.flush_finish_secs );
printf("<-data.max_reservation: '%d'\n", data.max_reservation );
printf("<-data.queue_sort_method: '%d'\n", data.queue_sort_method );
printf("<-data.load_adjustment_decay_time: '%s'\n", data.load_adjustment_decay_time ? data.load_adjustment_decay_time : "-NA-");
printf("<-data.load_formula: '%s'\n", data.load_formula ? data.load_formula : "-NA-");
**/

   if (!data.algorithm || data.algorithm[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Algorithm required!}");
      goto error_exit;
   }
   lSetString(sep, SC_algorithm, data.algorithm);
  
   if (!data.schedule_interval || data.schedule_interval[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Schedule Interval required!}");
      goto error_exit;
   }
   lSetString(sep, SC_schedule_interval, data.schedule_interval);
  
   lSetString(sep, SC_params, data.sc_params);

   lSetUlong(sep, SC_maxujobs, (u_long32) data.maxujobs);

   lSetUlong(sep, SC_flush_submit_sec, (u_long32) data.flush_submit_secs);
   lSetUlong(sep, SC_flush_finish_sec, (u_long32) data.flush_finish_secs);

   lSetUlong(sep, SC_max_reservation, (u_long32) data.max_reservation);
  
   lSetUlong(sep, SC_queue_sort_method, (u_long32) data.queue_sort_method);

   /*
   ** load adjustments need special treatment
   */
   lSetList(sep, SC_job_load_adjustments, data.job_load_adjustments);
   data.job_load_adjustments = NULL;

   if (!data.load_adjustment_decay_time || 
         data.load_adjustment_decay_time[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Load Adjustment Decay Time required!}");
      goto error_exit;
   }
   lSetString(sep, SC_load_adjustment_decay_time, 
                  data.load_adjustment_decay_time);
  
   if (!data.load_formula || data.load_formula[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Load Formula required!}");
      goto error_exit;
   }
   lSetString(sep, SC_load_formula, data.load_formula);
  
   if (!data.reprioritize_interval|| 
         data.reprioritize_interval[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Reprioritize Interval required!}");
      goto error_exit;
   }
   lSetString(sep, SC_reprioritize_interval, data.reprioritize_interval);

   if (!data.default_duration|| 
         data.default_duration[0] == '\0') {
      qmonMessageShow(qmon_sconf, True, "@{Default duration required!}");
      goto error_exit;
   }
   lSetString(sep, SC_default_duration, data.default_duration);
   /*
   ** schedd_job_info needs some extras
   ** see comment for schedd_job_info in qmonScheddSet
   */
   job_info = XmtChooserGetState(sconf_job_info);
   switch (job_info) {
      case 0:
         lSetString(sep, SC_schedd_job_info, "false");
         break;
      case 1:
         lSetString(sep, SC_schedd_job_info, "true");
         break;
      case 2:
         str = XmtInputFieldGetString(sconf_job_range);
         {
            lList *range_list = NULL;

            range_list_parse_from_string(&range_list, &alp, str,
                                         1, 0, INF_NOT_ALLOWED);
            lFreeList(&range_list);
         }
         if (alp) {
            qmonMessageShow(sconf_job_range, True, (StringConst)lGetString(lFirst(alp), AN_text));
            lFreeList(&alp);
            goto error_exit;
         }
         if (str && str[0] != '\0') {
            strcpy(buf, "job_list ");
            strcat(buf, str);
            lSetString(sep, SC_schedd_job_info, buf);
         }
         else {
            qmonMessageShow(qmon_sconf, True, "@{Job Range required!}");
            goto error_exit;
         }
   }

/* printf("------> qmonSchedGet\n"); */
/* lWriteElemTo(sep, stdout);    */

   qmonSchedFreeData();
   DRETURN(True);
error_exit:
   qmonSchedFreeData();
   DRETURN(False);
}
/*-------------------------------------------------------------------------*/
static void qmonUsersetOk(Widget w, XtPointer cld, XtPointer cad)
{
   String usetname = NULL;
   XmString xusetname = NULL;
   lList *lp = NULL;
   lList *ul = NULL;
   lList *alp = NULL;
   lListElem *up = NULL;
   lEnumeration *what = NULL;
   Boolean status = False;
   int usettype = 0;

   DENTER(GUI_LAYER, "qmonUsersetOk");

   /*
   ** get the dialog data and
   */
   usetname = XmtInputFieldGetString(uset_name);

   usettype = XmtChooserGetState(uset_type); 

   /*
   ** usetname required, show warning dialog
   */
   if (usetname && usetname[0] != '\0') {
      ul = XmStringToCull(uset_user_list, UE_Type, UE_name, ALL_ITEMS);
      /*
      ** do gdi stuff here
      */ 
      if (add_mode) {
         lAddElemStr(&lp, US_name, usetname, US_Type);
      }
      else {
         up = lCopyElem(lGetElemStr(qmonMirrorList(SGE_US_LIST), 
                           US_name, usetname));
         lp = lCreateList("userset", US_Type);
         lAppendElem(lp, up);
      }

      lSetList(lFirst(lp), US_entries, ul);
      lSetUlong(lFirst(lp), US_type, usettype); 

      what = lWhat("%T(ALL)", US_Type);

      if (add_mode) {
         alp = qmonAddList(SGE_US_LIST, 
                        qmonMirrorListRef(SGE_US_LIST),
                        US_name, &lp, NULL, what);
      }
      else {
         alp = qmonModList(SGE_US_LIST, 
                           qmonMirrorListRef(SGE_US_LIST),
                           US_name, &lp, NULL, what);
      }

      if (!qmonMessageBox(w, alp, 0))
         status = True;

      updateUsersetList();

      xusetname = XmtCreateXmString(usetname);
      XmListSelectItem(userset_names, xusetname, True);
      XmStringFree(xusetname);

      lFreeWhat(&what);
      lFreeList(&lp);
      lFreeList(&alp);
   }  
   else { 
      qmonMessageShow(w, True, "Userset List Name required !");
   }       
   
   if (status) 
      XtUnmanageChild(userset_ask_layout);

   DEXIT;
}