1
/*___INFO__MARK_BEGIN__*/
2
/*************************************************************************
4
* The Contents of this file are made available subject to the terms of
5
* the Sun Industry Standards Source License Version 1.2
8
* Sun Microsystems Inc., March, 2001
11
* Sun Industry Standards Source License Version 1.2
12
* =================================================
13
* The contents of this file are subject to the Sun Industry Standards
14
* Source License Version 1.2 (the "License"); You may not use this file
15
* except in compliance with the License. You may obtain a copy of the
16
* License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
18
* Software provided under this License is provided on an "AS IS" basis,
19
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
20
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
21
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
22
* See the License for the specific provisions governing your rights and
23
* obligations concerning the Software.
25
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
27
* Copyright: 2001 by Sun Microsystems, Inc.
29
* All Rights Reserved.
31
************************************************************************/
32
/*___INFO__MARK_END__*/
44
#include <Xmt/Create.h>
45
#include <Xmt/Layout.h>
46
#include <Xmt/Chooser.h>
47
#include <Xmt/Dialog.h>
48
#include <Xmt/MsgLine.h>
49
#include <Xmt/InputField.h>
50
#include <Xmt/Procedures.h>
52
#include "sge_all_listsL.h"
55
#include "sge_complex_schedd.h"
56
#include "sge_answer.h"
57
#include "sge_feature.h"
59
#include "load_correction.h"
62
#include "sge_hgroup.h"
63
#include "sge_hgroup_qconf.h"
64
#include "gdi/sge_gdi.h"
65
#include "gdi/sge_gdi_ctx.h"
67
#include "qmon_proto.h"
68
#include "qmon_rmon.h"
69
#include "qmon_cull.h"
70
#include "qmon_util.h"
71
#include "qmon_appres.h"
72
#include "qmon_host.h"
73
#include "qmon_comm.h"
74
#include "qmon_globals.h"
75
#include "qmon_timer.h"
76
#include "qmon_widgets.h"
77
#include "qmon_quarks.h"
78
#include "qmon_message.h"
79
#include "qmon_load.h"
80
#include "qmon_cplx.h"
81
#include "qmon_manop.h"
82
#include "qmon_project.h"
83
#include "qmon_queue.h"
87
extern sge_gdi_ctx_class_t *ctx;
89
/*-------------------------------------------------------------------------*/
90
typedef struct _tHostEntry {
91
lList *consumable_config_list;
93
lList *usage_scaling_list;
99
lList *reporting_variables;
102
XtResource host_resources[] = {
104
{ "name", "name", XtRString,
105
sizeof(char*), XtOffsetOf(tHostEntry, name),
106
XtRImmediate, NULL },
108
{ "scaling_list", "scaling_list", QmonRHS_Type,
109
sizeof(lList*), XtOffsetOf(tHostEntry, scaling_list),
110
XtRImmediate, NULL },
112
{ "usage_scaling_list", "usage_scaling_list", QmonRHS_Type,
113
sizeof(lList*), XtOffsetOf(tHostEntry, usage_scaling_list),
114
XtRImmediate, NULL },
116
/*---- consumables ----*/
117
{ "consumable_config_list", "consumable_config_list", QmonRCE2_Type,
118
sizeof(lList*), XtOffsetOf(tHostEntry, consumable_config_list),
119
XtRImmediate, NULL },
122
{ "acl", "acl", QmonRUS_Type,
124
XtOffsetOf(tHostEntry, acl),
125
XtRImmediate, NULL },
127
{ "xacl", "xacl", QmonRUS_Type,
129
XtOffsetOf(tHostEntry, xacl),
130
XtRImmediate, NULL },
132
/*---- projects ----*/
133
{ "prj", "prj", QmonRPR_Type,
135
XtOffsetOf(tHostEntry, prj),
136
XtRImmediate, NULL },
138
{ "xprj", "xprj", QmonRPR_Type,
140
XtOffsetOf(tHostEntry, xprj),
141
XtRImmediate, NULL },
143
/*---- reporting variables ----*/
144
{ "reporting_variables", "reporting_variables", QmonRSTU_Type,
146
XtOffsetOf(tHostEntry, reporting_variables),
152
/*-------------------------------------------------------------------------*/
153
static Widget qmonCreateHostConfig(Widget parent);
154
static Widget qmonCreateExecHostConfig(Widget parent, XtPointer cld);
155
static Widget qmonCreateExecHostAsk(Widget parent);
156
static void qmonHostFillList(void);
157
static void qmonHostFolderChange(Widget w, XtPointer cld, XtPointer cad);
158
static void qmonHostHelp(Widget w, XtPointer cld, XtPointer cad);
159
static void qmonHostAdd(Widget w, XtPointer cld, XtPointer cad);
160
static void qmonHostDelete(Widget w, XtPointer cld, XtPointer cad);
162
static Widget qmonCreateAdminHostConfig(Widget parent, XtPointer cld);
163
static Widget qmonCreateSubmitHostConfig(Widget parent, XtPointer cld);
165
static void qmonExecHostShutdown(Widget w, XtPointer cld, XtPointer cad);
166
static void qmonExecHostOk(Widget w, XtPointer cld, XtPointer cad);
167
static void qmonExecHostCancel(Widget w, XtPointer cld, XtPointer cad);
168
static void qmonExecHostChange(Widget w, XtPointer cld, XtPointer cad);
169
static void qmonExecHostSelect(Widget w, XtPointer cld, XtPointer cad);
170
static void qmonExecHostCheckName(Widget w, XtPointer cld, XtPointer cad);
171
static void qmonExecHostCheckScaling(Widget w, XtPointer cld, XtPointer cad);
172
static void qmonExecHostSetAsk(StringConst name);
173
static lList* qmonExecHostGetAsk(void);
174
static void qmonHostAvailableAcls(void);
175
static void qmonHostAvailableProjects(void);
176
static void qmonHostAvailableReportVars(void);
178
static void qmonExecHostAccessToggle(Widget w, XtPointer cld, XtPointer cad);
179
static void qmonExecHostAccessAdd(Widget w, XtPointer cld, XtPointer cad);
180
static void qmonExecHostAccessRemove(Widget w, XtPointer cld, XtPointer cad);
181
static void qmonExecHostProjectToggle(Widget w, XtPointer cld, XtPointer cad);
182
static void qmonExecHostProjectAdd(Widget w, XtPointer cld, XtPointer cad);
183
static void qmonExecHostProjectRemove(Widget w, XtPointer cld, XtPointer cad);
184
static void qmonExecHostReportVarAdd(Widget w, XtPointer cld, XtPointer cad);
185
static void qmonExecHostReportVarRemove(Widget w, XtPointer cld, XtPointer cad);
186
static void qmonPopdownHostConfig(Widget w, XtPointer cld, XtPointer cad);
187
static Widget qmonCreateHostgroupAsk(Widget parent);
188
static void qmonHostgroupChange(Widget w, XtPointer cld, XtPointer cad);
189
static void qmonHostgroupOk(Widget w, XtPointer cld, XtPointer cad);
190
static void qmonHostgroupCancel(Widget w, XtPointer cld, XtPointer cad);
191
static void qmonHostgroupCheckName(Widget w, XtPointer cld, XtPointer cad);
192
static void qmonHostgroupSetAsk(StringConst name);
193
static void qmonHostgroupSelect(Widget w, XtPointer cld, XtPointer cad);
194
static void qmonHostgroupAddHost(Widget w, XtPointer cld, XtPointer cad);
195
static void qmonHostgroupAddHostgroups(Widget w, XtPointer cld, XtPointer cad);
196
static void updateHostListCB(Widget w, XtPointer cld, XtPointer cad);
197
static void updateHostList(void);
198
/*-------------------------------------------------------------------------*/
199
static Widget qmon_host = NULL;
200
static Widget adminhost_list = NULL;
201
static Widget submithost_list = NULL;
202
static Widget hostgroup_list = NULL;
203
static Widget hostgroup_memberlist = NULL;
204
static Widget host_modify = NULL;
205
static Widget host_shutdown = NULL;
207
static Widget exechost_list = NULL;
208
static Widget exechost_access = 0;
209
static Widget exechost_reporting_variables = 0;
210
static Widget exechost_load_scaling = 0;
211
static Widget exechost_consumables = 0;
212
static Widget exechost_usage_scaling = 0;
213
static Widget eh_ask_layout = 0;
214
static Widget hg_ask_layout = 0;
215
static Widget hg_name_w = 0;
216
static Widget hg_memberlist_w = 0;
217
static Widget hg_hglist_w = 0;
218
static Widget hg_member_w = 0;
219
static Widget eh_name_w = 0;
220
static Widget eh_folder = 0;
221
static Widget access_list = 0;
222
static Widget access_allow = 0;
223
static Widget access_deny = 0;
224
static Widget access_toggle = 0;
225
static Widget project_list = 0;
226
static Widget project_allow = 0;
227
static Widget project_deny = 0;
228
static Widget project_toggle = 0;
229
static Widget reporting_variables_list = 0;
230
static Widget reporting_variables_chosen = 0;
232
static tHostEntry host_data = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};
233
static int add_mode = 0;
234
static int dialog_mode = SGE_ADMINHOST_LIST;
238
/*-------------------------------------------------------------------------*/
239
void qmonPopupHostConfig(Widget w, XtPointer cld, XtPointer cad)
244
DENTER(GUI_LAYER, "qmonPopupHostConfig");
246
/* set busy cursor */
247
XmtDisplayBusyCursor(w);
250
shell = XmtGetTopLevelShell(w);
251
qmon_host = qmonCreateHostConfig(shell);
252
XmtAddDeleteCallback(shell, XmDO_NOTHING,
253
qmonPopdownHostConfig, NULL);
254
XtAddEventHandler(XtParent(qmon_host), StructureNotifyMask, False,
255
SetMinShellSize, NULL);
258
qmonMirrorMultiAnswer(ADMINHOST_T | SUBMITHOST_T | EXECHOST_T | CENTRY_T |
259
USERSET_T | PROJECT_T, &alp);
261
qmonMessageBox(w, alp, 0);
263
/* set default cursor */
264
XmtDisplayDefaultCursor(w);
269
qmonTimerAddUpdateProc(ADMINHOST_T, "updateHostList", updateHostList);
270
qmonStartTimer(ADMINHOST_T | SUBMITHOST_T | EXECHOST_T |
271
USERSET_T | PROJECT_T);
274
xmui_manage(qmon_host);
276
/* set default cursor */
277
XmtDisplayDefaultCursor(w);
283
/*-------------------------------------------------------------------------*/
284
static void qmonPopdownHostConfig(Widget w, XtPointer cld, XtPointer cad)
286
DENTER(GUI_LAYER, "qmonPopdownHostConfig");
288
qmonStopTimer(ADMINHOST_T | SUBMITHOST_T | EXECHOST_T |
289
USERSET_T | PROJECT_T);
290
qmonTimerRmUpdateProc(ADMINHOST_T, "updateHostList");
291
xmui_unmanage(qmon_host);
296
/*-------------------------------------------------------------------------*/
297
static void updateHostListCB(Widget w, XtPointer cld, XtPointer cad)
301
DENTER(GUI_LAYER, "updateHostListCB");
304
** fetch changed lists
306
qmonMirrorMultiAnswer(ADMINHOST_T | SUBMITHOST_T | EXECHOST_T | HGROUP_T, &alp);
308
qmonMessageBox(w, alp, 0);
317
/*-------------------------------------------------------------------------*/
318
static void updateHostList(void)
320
DENTER(GUI_LAYER, "updateHostList");
322
if (qmon_host && XtIsManaged(qmon_host))
328
/*-------------------------------------------------------------------------*/
330
/*-------------------------------------------------------------------------*/
332
/*-------------------------------------------------------------------------*/
333
static Widget qmonCreateHostConfig(
336
Widget host_layout, host_add, host_delete, host_done, host_help,
337
host_main_link, host_folder, adminhost_hostname, submithost_hostname,
340
DENTER(GUI_LAYER, "qmonCreateHostConfig");
342
host_layout = XmtBuildQueryDialog( parent, "qmon_host",
344
"host_folder", &host_folder,
345
"host_add", &host_add,
346
"host_modify", &host_modify,
347
"host_delete", &host_delete,
348
"host_shutdown", &host_shutdown,
349
"host_done", &host_done,
350
"host_help", &host_help,
351
"host_main_link", &host_main_link,
352
"adminhost_list", &adminhost_list,
353
"submithost_list", &submithost_list,
354
"hostgroup_list", &hostgroup_list,
355
"hostgroup_memberlist", &hostgroup_memberlist,
356
"adminhost_hostname", &adminhost_hostname,
357
"submithost_hostname", &submithost_hostname,
360
hg_ask_layout = qmonCreateHostgroupAsk(host_folder);
362
exechost_layout = qmonCreateExecHostConfig(host_folder, NULL);
363
XtManageChild(exechost_layout);
366
XtAddCallback(host_main_link, XmNactivateCallback,
367
qmonMainControlRaise, NULL);
368
XtAddCallback(host_folder, XmNvalueChangedCallback,
369
qmonHostFolderChange, NULL);
370
XtAddCallback(host_done, XmNactivateCallback,
371
qmonPopdownHostConfig, NULL);
372
XtAddCallback(host_add, XmNactivateCallback,
373
qmonHostAdd, (XtPointer) 1);
374
XtAddCallback(host_modify, XmNactivateCallback,
376
XtAddCallback(host_delete, XmNactivateCallback,
377
qmonHostDelete, NULL);
378
XtAddCallback(host_shutdown, XmNactivateCallback,
379
qmonExecHostShutdown, NULL);
380
XtAddCallback(adminhost_hostname, XmtNinputCallback,
382
XtAddCallback(submithost_hostname, XmtNinputCallback,
384
XtAddCallback(host_help, XmNactivateCallback,
386
XtAddCallback(hostgroup_list, XmNbrowseSelectionCallback,
387
qmonHostgroupSelect, NULL);
389
XtAddEventHandler(XtParent(host_layout), StructureNotifyMask, False,
390
SetMinShellSize, NULL);
396
/*-------------------------------------------------------------------------*/
397
static void qmonHostFillList(void)
400
static lCondition *where = NULL;
401
static lEnumeration *what = NULL;
403
DENTER(GUI_LAYER, "qmonHostFillList");
406
/* admin host list */
407
lp = qmonMirrorList(SGE_ADMINHOST_LIST);
408
lPSortList(lp, "%I+", AH_name);
409
UpdateXmListFromCull(adminhost_list, XmFONTLIST_DEFAULT_TAG, lp, AH_name);
411
/* submit host list */
412
lp = qmonMirrorList(SGE_SUBMITHOST_LIST);
413
lPSortList(lp, "%I+", SH_name);
414
UpdateXmListFromCull(submithost_list, XmFONTLIST_DEFAULT_TAG, lp, SH_name);
416
/* exec host is a special case needs additional configuration */
418
where = lWhere("%T(%I!=%s)", EH_Type, EH_name, SGE_TEMPLATE_NAME);
420
what = lWhat("%T(ALL)", EH_Type);
422
lp = lSelect("EHL", qmonMirrorList(SGE_EXECHOST_LIST), where, what);
423
lPSortList(lp, "%I+", EH_name);
424
UpdateXmListFromCull(exechost_list, XmFONTLIST_DEFAULT_TAG, lp, EH_name);
425
XmListMoveItemToPos(exechost_list, "global", 1);
427
XmListSelectPos(exechost_list, 1, True);
430
lp = qmonMirrorList(SGE_HGROUP_LIST);
431
lPSortList(lp, "%I+", HGRP_name);
432
UpdateXmListFromCull(hostgroup_list, XmFONTLIST_DEFAULT_TAG, lp, HGRP_name);
433
XmListSelectPos(hostgroup_list, 1, True);
438
/*-------------------------------------------------------------------------*/
439
static void qmonHostAvailableReportVars(void)
443
DENTER(GUI_LAYER, "qmonHostAvailableReportVars");
445
lp = qmonMirrorList(SGE_CENTRY_LIST);
446
lPSortList(lp, "%I+", CE_name);
447
UpdateXmListFromCull(reporting_variables_list, XmFONTLIST_DEFAULT_TAG, lp, CE_name);
452
/*-------------------------------------------------------------------------*/
453
static void qmonHostAvailableAcls(void)
457
DENTER(GUI_LAYER, "qmonHostAvailableAcls");
459
lp = qmonMirrorList(SGE_USERSET_LIST);
460
lPSortList(lp, "%I+", US_name);
461
UpdateXmListFromCull(access_list, XmFONTLIST_DEFAULT_TAG, lp, US_name);
466
/*-------------------------------------------------------------------------*/
467
static void qmonHostAvailableProjects(void)
471
DENTER(GUI_LAYER, "qmonHostAvailableProjects");
473
lp = qmonMirrorList(SGE_PROJECT_LIST);
474
lPSortList(lp, "%I+", PR_name);
475
UpdateXmListFromCull(project_list, XmFONTLIST_DEFAULT_TAG, lp, PR_name);
481
/*-------------------------------------------------------------------------*/
482
/* Exec Host Stuff */
483
/*-------------------------------------------------------------------------*/
484
static Widget qmonCreateExecHostConfig(
488
Widget exechost_layout, exechost_add, exechost_shutdown,
489
exechost_modify, exechost_delete, exechost_done;
491
DENTER(GUI_LAYER, "qmonCreateExecHostConfig");
493
exechost_layout = XmtCreateLayout(parent, "exechost_layout", NULL, 0);
494
XmtDialogBindResourceList(exechost_layout, host_resources,
495
XtNumber(host_resources));
496
XmtCreateQueryChildren( exechost_layout,
497
"exechost_list", &exechost_list,
498
"exechost_load_scaling", &exechost_load_scaling,
499
"exechost_usage_scaling", &exechost_usage_scaling,
500
"exechost_add", &exechost_add,
501
"exechost_modify", &exechost_modify,
502
"exechost_delete", &exechost_delete,
503
"exechost_done", &exechost_done,
504
"exechost_shutdown", &exechost_shutdown,
505
"exechost_consumables", &exechost_consumables,
506
"exechost_access", &exechost_access,
507
"exechost_reporting_variables",
508
&exechost_reporting_variables,
511
XtAddCallback(exechost_list, XmNbrowseSelectionCallback,
512
qmonExecHostSelect, NULL);
515
XtAddCallback(exechost_done, XmNactivateCallback,
516
qmonPopdownHostConfig, NULL);
517
XtAddCallback(exechost_add, XmNactivateCallback,
518
qmonExecHostChange, (XtPointer) 1);
519
XtAddCallback(exechost_modify, XmNactivateCallback,
520
qmonExecHostChange, (XtPointer) 0);
521
XtAddCallback(exechost_delete, XmNactivateCallback,
522
qmonHostDelete, (XtPointer) SGE_EXECHOST_LIST);
523
XtAddCallback(exechost_shutdown, XmNactivateCallback,
524
qmonExecHostShutdown, NULL);
528
** create exec host ask dialog for adding/modifying exec hosts
530
eh_ask_layout = qmonCreateExecHostAsk(exechost_layout);
533
return exechost_layout;
536
/*-------------------------------------------------------------------------*/
537
static void qmonExecHostSelect(Widget w, XtPointer cld, XtPointer cad)
539
XmListCallbackStruct *cbs = (XmListCallbackStruct*) cad;
545
static char buf[10*BUFSIZ];
548
DENTER(GUI_LAYER, "qmonExecHostSelect");
550
if (! XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &ehname)) {
551
fprintf(stderr, "XmStringGetLtoR failed\n");
556
ehp = host_list_locate(qmonMirrorList(SGE_EXECHOST_LIST), ehname);
557
XtFree((char*) ehname);
561
** fill the load scaling and usage scaling list
563
lsl = lGetList(ehp, EH_scaling_list);
565
XmTextDisableRedisplay(exechost_load_scaling);
567
XmTextSetString(exechost_load_scaling, "");
569
sprintf(buf, "%-15.15s %3.2f\n", lGetString(ep, HS_name),
570
lGetDouble(ep, HS_value));
571
XmTextInsert(exechost_load_scaling, pos, buf);
574
XmTextEnableRedisplay(exechost_load_scaling);
577
** fill the consumable list into the textfield
579
lsl = lGetList(ehp, EH_consumable_config_list);
580
XmTextDisableRedisplay(exechost_consumables);
582
XmTextSetString(exechost_consumables, "");
584
sprintf(buf, "%-15.15s %-15.15s\n", lGetString(ep, CE_name),
585
lGetString(ep, CE_stringval));
586
XmTextInsert(exechost_consumables, pos, buf);
589
XmTextEnableRedisplay(exechost_consumables);
592
** reporting variables
594
lsl = lGetList(ehp, EH_report_variables);
595
XmTextDisableRedisplay(exechost_reporting_variables);
597
XmTextSetString(exechost_reporting_variables, "");
599
sprintf(buf, "%s\n", lGetString(ep, STU_name));
600
XmTextInsert(exechost_reporting_variables, pos, buf);
603
XmTextEnableRedisplay(exechost_reporting_variables);
606
** fill the access list into the textfield
608
XmTextDisableRedisplay(exechost_access);
610
XmTextSetString(exechost_access, "");
615
lsl = lGetList(ehp, EH_acl);
616
sprintf(buf, "%-15.15s", "Access");
619
strcat(buf, lGetString(ep, US_name));
621
if (!lGetNumberOfElem(lsl))
622
strcat(buf, " NONE");
624
XmTextInsert(exechost_access, pos, buf);
630
lsl = lGetList(ehp, EH_xacl);
631
sprintf(buf, "%-15.15s", "XAccess");
634
strcat(buf, lGetString(ep, US_name));
636
if (!lGetNumberOfElem(lsl))
637
strcat(buf, " NONE");
639
XmTextInsert(exechost_access, pos, buf);
645
lsl = lGetList(ehp, EH_prj);
646
sprintf(buf, "%-15.15s", "Projects");
649
strcat(buf, lGetString(ep, PR_name));
651
if (!lGetNumberOfElem(lsl))
652
strcat(buf, " NONE");
654
XmTextInsert(exechost_access, pos, buf);
660
lsl = lGetList(ehp, EH_xprj);
661
sprintf(buf, "%-15.15s", "XProjects");
664
strcat(buf, lGetString(ep, PR_name));
666
if (!lGetNumberOfElem(lsl))
667
strcat(buf, " NONE");
669
XmTextInsert(exechost_access, pos, buf);
672
XmTextEnableRedisplay(exechost_access);
674
usl = lGetList(ehp, EH_usage_scaling_list);
675
XmTextDisableRedisplay(exechost_usage_scaling);
677
XmTextSetString(exechost_usage_scaling, "");
679
sprintf(buf, "%-15.15s %3.2f\n", lGetString(ep, HS_name),
680
lGetDouble(ep, HS_value));
681
XmTextInsert(exechost_usage_scaling, pos, buf);
684
XmTextEnableRedisplay(exechost_usage_scaling);
690
/*-------------------------------------------------------------------------*/
691
static Widget qmonCreateExecHostAsk(
694
Widget eh_ok, eh_cancel, eh_load_scaling, eh_usage_scaling,
696
Widget access_add, access_remove, access_dialog;
697
Widget reporting_variables_add, reporting_variables_remove;
698
Widget project_add, project_remove, project_dialog, eh_project;
700
DENTER(GUI_LAYER, "qmonCreateExecHostAsk");
702
eh_ask_layout = XmtBuildQueryDialog( parent, "eh_ask_shell",
703
host_resources, XtNumber(host_resources),
705
"eh_folder", &eh_folder,
706
"eh_cancel", &eh_cancel,
707
"eh_name", &eh_name_w,
708
"eh_load_scaling", &eh_load_scaling,
709
"eh_usage_scaling", &eh_usage_scaling,
710
"complexes_ccl", &complexes_ccl,
712
"access_list", &access_list,
713
"access_allow", &access_allow,
714
"access_deny", &access_deny,
715
"access_add", &access_add,
716
"access_remove", &access_remove,
717
"access_toggle", &access_toggle,
718
"access_dialog", &access_dialog,
720
"project_list", &project_list,
721
"project_allow", &project_allow,
722
"project_deny", &project_deny,
723
"project_add", &project_add,
724
"project_remove", &project_remove,
725
"project_toggle", &project_toggle,
726
"project_dialog", &project_dialog,
727
"eh_project", &eh_project,
728
"reporting_variables_list", &reporting_variables_list,
729
"reporting_variables_chosen", &reporting_variables_chosen,
730
"reporting_variables_add", &reporting_variables_add,
731
"reporting_variables_remove", &reporting_variables_remove,
734
XtAddCallback(eh_ok, XmNactivateCallback,
735
qmonExecHostOk, NULL);
736
XtAddCallback(eh_cancel, XmNactivateCallback,
737
qmonExecHostCancel, NULL);
738
XtAddCallback(eh_name_w, XmtNverifyCallback,
739
qmonExecHostCheckName, NULL);
740
XtAddCallback(eh_load_scaling, XmNleaveCellCallback,
741
qmonExecHostCheckScaling, NULL);
742
XtAddCallback(eh_usage_scaling, XmNleaveCellCallback,
743
qmonExecHostCheckScaling, NULL);
745
XtAddCallback(complexes_ccl, XmNselectCellCallback,
746
qmonLoadSelectEntry, NULL);
747
XtAddCallback(complexes_ccl, XmNlabelActivateCallback,
748
qmonLoadNames, (XtPointer) 1);
750
XtAddCallback(access_toggle, XmtNvalueChangedCallback,
751
qmonExecHostAccessToggle, NULL);
752
XtAddCallback(access_add, XmNactivateCallback,
753
qmonExecHostAccessAdd, NULL);
754
XtAddCallback(access_remove, XmNactivateCallback,
755
qmonExecHostAccessRemove, NULL);
756
XtAddCallback(access_dialog, XmNactivateCallback,
757
qmonPopupManopConfig, (XtPointer)2);
759
XtAddCallback(reporting_variables_add, XmNactivateCallback,
760
qmonExecHostReportVarAdd, NULL);
761
XtAddCallback(reporting_variables_remove, XmNactivateCallback,
762
qmonExecHostReportVarRemove, NULL);
765
** Project & Xproject
767
XtAddCallback(project_toggle, XmtNvalueChangedCallback,
768
qmonExecHostProjectToggle, NULL);
769
XtAddCallback(project_add, XmNactivateCallback,
770
qmonExecHostProjectAdd, NULL);
771
XtAddCallback(project_remove, XmNactivateCallback,
772
qmonExecHostProjectRemove, NULL);
773
XtAddCallback(project_dialog, XmNactivateCallback,
774
qmonPopupProjectConfig, NULL);
776
XtAddEventHandler(XtParent(eh_ask_layout), StructureNotifyMask, False,
777
SetMinShellSize, NULL);
780
return eh_ask_layout;
783
/*-------------------------------------------------------------------------*/
784
static void qmonExecHostOk(Widget w, XtPointer cld, XtPointer cad)
789
Boolean status = False;
790
XmString xehname = NULL;
791
StringConst ehname = NULL;
793
DENTER(GUI_LAYER, "qmonExecHostOk");
796
** get the list with one new host
798
ehl = qmonExecHostGetAsk();
801
ehname = lGetHost(lFirst(ehl), EH_name);
805
what = lWhat("%T(ALL)", EH_Type);
808
alp = qmonAddList(SGE_EXECHOST_LIST, qmonMirrorListRef(SGE_EXECHOST_LIST), EH_name, &ehl, NULL, what);
811
alp = qmonModList(SGE_EXECHOST_LIST, qmonMirrorListRef(SGE_EXECHOST_LIST), EH_name, &ehl, NULL, what);
814
if (lFirst(alp) && lGetUlong(lFirst(alp), AN_status) == STATUS_OK)
817
qmonMessageBox(w, alp, 0);
821
XtUnmanageChild(eh_ask_layout);
824
** select the modified or added Exec Host
826
xehname = XmtCreateXmString(ehname);
827
XmListSelectItem(exechost_list, xehname, True);
828
XmStringFree(xehname);
830
qmonExecHostSetAsk(ehname);
840
/*-------------------------------------------------------------------------*/
841
static void qmonExecHostCancel(Widget w, XtPointer cld, XtPointer cad)
843
DENTER(GUI_LAYER, "qmonExecHostCancel");
845
XtUnmanageChild(eh_ask_layout);
851
/*-------------------------------------------------------------------------*/
852
static lList* qmonExecHostGetAsk(void)
855
static lCondition *where = NULL;
857
DENTER(GUI_LAYER, "qmonExecHostGetAsk");
859
lp = lCreateElemList("EH", EH_Type, 1);
862
XmtDialogGetDialogValues(eh_ask_layout, &host_data);
867
lSetHost(lFirst(lp), EH_name, host_data.name);
868
XtFree((char*)host_data.name);
869
host_data.name = NULL;
872
** the cast to double is absolutely necessary, otherwise
873
** the varargs get expanded in a wrong way
876
where = lWhere("%T(%I != %g)", HS_Type, HS_value, (double)1.0);
880
host_data.scaling_list = lSelectDestroy(host_data.scaling_list,
883
lSetList(lFirst(lp), EH_scaling_list, host_data.scaling_list);
884
host_data.scaling_list = NULL;
887
** consumable_config_list
889
lSetList(lFirst(lp), EH_consumable_config_list,
890
host_data.consumable_config_list);
891
host_data.consumable_config_list = NULL;
896
lSetList(lFirst(lp), EH_acl, host_data.acl);
897
host_data.acl = NULL;
898
lSetList(lFirst(lp), EH_xacl, host_data.xacl);
899
host_data.xacl = NULL;
901
** reporting variables
903
lSetList(lFirst(lp), EH_report_variables, host_data.reporting_variables);
904
host_data.reporting_variables = NULL;
909
host_data.usage_scaling_list =
910
lSelectDestroy(host_data.usage_scaling_list,
913
lSetList(lFirst(lp), EH_usage_scaling_list,
914
host_data.usage_scaling_list);
915
host_data.usage_scaling_list = NULL;
920
lSetList(lFirst(lp), EH_prj, host_data.prj);
921
host_data.prj = NULL;
922
lSetList(lFirst(lp), EH_xprj, host_data.xprj);
923
host_data.xprj = NULL;
931
/*-------------------------------------------------------------------------*/
932
static void qmonExecHostSetAsk(
935
lListElem *ehp = NULL;
945
lList *entries = NULL;
948
static lCondition *where = NULL;
950
DENTER(GUI_LAYER, "qmonExecHostSetAsk");
952
cl = qmonMirrorList(SGE_CENTRY_LIST);
953
ehl = qmonMirrorList(SGE_EXECHOST_LIST);
954
acls = qmonMirrorList(SGE_USERSET_LIST);
955
prjs = qmonMirrorList(SGE_PROJECT_LIST);
959
** get the selected host element
961
ehp = host_list_locate(ehl, name);
963
XtFree((char*)host_data.name);
964
host_data.name = XtNewString(name);
967
XtFree((char*)host_data.name);
968
host_data.name = NULL;
971
/* get complex entries and filter out scalable entries */
972
entries = lCopyList("", cl);
974
where = lWhere("%T(%I == %u || %I == %u || %I == %u || %I == %u)", CE_Type,
975
CE_valtype, TYPE_INT, CE_valtype, TYPE_TIM,
976
CE_valtype, TYPE_DOUBLE, CE_valtype, TYPE_MEM);
977
entries = lSelectDestroy(entries, where);
978
lPSortList(entries, "%I+", CE_name);
979
for_each (ep, entries) {
980
lsep = lAddElemStr(&lsl, HS_name, lGetString(ep, CE_name), HS_Type);
981
lSetDouble(lsep, HS_value, 1.0);
986
ehsl = lGetList(ehp, EH_scaling_list);
988
for_each (ep, ehsl) {
989
lsep = lGetElemStr(lsl, HS_name, lGetString(ep, HS_name));
990
lSetDouble(lsep, HS_value, lGetDouble(ep, HS_value));
995
** set now fully configured load scaling list
997
lFreeList(&(host_data.scaling_list));
998
host_data.scaling_list = lsl;
1001
** set the consumable/per slot limit entries
1004
host_data.consumable_config_list = lGetList(ehp,
1005
EH_consumable_config_list);
1008
host_data.consumable_config_list = NULL;
1015
host_data.acl = lGetList(ehp, EH_acl);
1016
host_data.xacl = lGetList(ehp, EH_xacl);
1019
host_data.acl = NULL;
1020
host_data.xacl = NULL;
1024
** set reporting variables
1027
host_data.reporting_variables = lGetList(ehp, EH_report_variables);
1030
host_data.reporting_variables = NULL;
1036
** build the usage scaling list, we have three entries at the moment:
1039
usl = lCreateElemList("UsageScalingList", HS_Type, 3);
1041
lSetString(ep, HS_name, USAGE_ATTR_CPU);
1042
lSetDouble(ep, HS_value, 1.0);
1044
lSetString(ep, HS_name, USAGE_ATTR_MEM);
1045
lSetDouble(ep, HS_value, 1.0);
1047
lSetString(ep, HS_name, USAGE_ATTR_IO);
1048
lSetDouble(ep, HS_value, 1.0);
1052
** get the usage scaling list from host
1054
ehul = lGetList(ehp, EH_usage_scaling_list);
1056
for_each (ep, ehul) {
1057
usep = lGetElemStr(usl, HS_name, lGetString(ep, HS_name));
1058
lSetDouble(usep, HS_value, lGetDouble(ep, HS_value));
1063
** set now fully configured usage scaling list
1065
lFreeList(&(host_data.usage_scaling_list));
1066
host_data.usage_scaling_list = usl;
1072
host_data.prj = lGetList(ehp, EH_prj);
1073
host_data.xprj = lGetList(ehp, EH_xprj);
1076
host_data.prj = NULL;
1077
host_data.xprj = NULL;
1081
** set the values in the matrices
1083
XmtDialogSetDialogValues(eh_ask_layout, &host_data);
1086
** fill the acl list
1088
qmonHostAvailableAcls();
1091
** fill the reporting variables
1093
qmonHostAvailableReportVars();
1096
** fill the project list
1098
qmonHostAvailableProjects();
1104
/*-------------------------------------------------------------------------*/
1105
static void qmonExecHostShutdown(Widget w, XtPointer cld, XtPointer cad)
1109
static lCondition *where = NULL;
1110
const char *default_cell = ctx->get_default_cell(ctx);
1112
DENTER(GUI_LAYER, "qmonExecHostShutdown");
1115
where = lWhere("%T(%I != %s)", EH_Type, EH_name, SGE_GLOBAL_NAME);
1117
lp = XmStringToCull(exechost_list, EH_Type, EH_name, SELECTED_ITEMS);
1118
lp = lSelectDestroy(lp, where);
1120
/* if no elements remain, we get an empty list, however gdi_kill()
1121
* deletes all hosts if list is empty
1124
alp = ctx->kill(ctx, lp, default_cell, 0, EXECD_KILL);
1125
qmonMessageBox(w, alp, 1);
1133
/*-------------------------------------------------------------------------*/
1134
static void qmonHostDelete(Widget w, XtPointer cld, XtPointer cad)
1136
/* int type = (int)(long) cld; */ /*
1137
* 64 bit pointers == long , this cast
1138
* keeps the compiler's mouth shut
1140
int type = dialog_mode;
1143
lEnumeration *what = NULL;
1148
DENTER(GUI_LAYER, "qmonHostDelete");
1151
case SGE_ADMINHOST_LIST:
1153
list = adminhost_list;
1156
case SGE_SUBMITHOST_LIST:
1158
list = submithost_list;
1161
case SGE_EXECHOST_LIST:
1163
list = exechost_list;
1166
case SGE_HGROUP_LIST:
1168
list = hostgroup_list;
1176
lp = XmStringToCull(list, dp, field, SELECTED_ITEMS);
1179
what = lWhat("%T(ALL)", dp);
1181
alp = qmonDelList(type, qmonMirrorListRef(type), field, &lp, NULL, what);
1183
qmonMessageBox(w, alp, 0);
1194
/*-------------------------------------------------------------------------*/
1195
static void qmonHostHelp(Widget w, XtPointer cld, XtPointer cad)
1199
DENTER(GUI_LAYER, "qmonHostHelp");
1201
switch(dialog_mode) {
1202
case SGE_ADMINHOST_LIST:
1203
widget = adminhost_list;
1205
case SGE_SUBMITHOST_LIST:
1206
widget = submithost_list;
1208
case SGE_HGROUP_LIST:
1209
widget = hostgroup_list;
1211
case SGE_EXECHOST_LIST:
1212
widget = exechost_list;
1216
XmtHelpDisplayContextHelp(widget);
1222
/*-------------------------------------------------------------------------*/
1223
static void qmonHostAdd(Widget w, XtPointer cld, XtPointer cad)
1225
int type = dialog_mode;
1228
lEnumeration *what = NULL;
1230
char unique[CL_MAXHOSTLEN];
1236
DENTER(GUI_LAYER, "qmonHostAdd");
1239
case SGE_ADMINHOST_LIST:
1241
list = adminhost_list;
1243
hostname = XmtNameToWidget(list, "~*adminhost_hostname");
1245
case SGE_SUBMITHOST_LIST:
1247
list = submithost_list;
1249
hostname = XmtNameToWidget(list, "~*submithost_hostname");
1251
case SGE_HGROUP_LIST:
1252
qmonHostgroupChange(w, cld, NULL);
1255
case SGE_EXECHOST_LIST:
1256
qmonExecHostChange(w, cld, NULL);
1260
DPRINTF(("Not allowed\n"));
1265
host = XmtInputFieldGetString(hostname);
1268
if (host && host[0] != '\0' && host[0] != ' ') {
1270
DPRINTF(("host = %s\n", host));
1272
/* try to resolve hostname */
1273
ret=sge_resolve_hostname(host, unique, EH_name);
1276
case CL_RETVAL_GETHOSTNAME_ERROR:
1277
qmonMessageShow(w, True, "Can't resolve host '%s'", host);
1280
what = lWhat("%T(ALL)", dp);
1282
if (!(lp = lCreateElemList("AH", dp, 1))) {
1283
fprintf(stderr, "lCreateElemList failed\n");
1288
lSetHost(lFirst(lp), field, unique);
1290
alp = qmonAddList(type, qmonMirrorListRef(type),
1291
field, &lp, NULL, what);
1293
qmonMessageBox(w, alp, 0);
1296
XmListSelectPos(list, 0, True);
1304
DPRINTF(("sge_resolve_hostname() failed resolving: %s\n", cl_get_error_text(ret)));
1306
XmtInputFieldSetString(hostname, "");
1312
/*-------------------------------------------------------------------------*/
1313
static void qmonExecHostChange(Widget w, XtPointer cld, XtPointer cad)
1315
long mode = (long) cld;
1321
DENTER(GUI_LAYER, "qmonExecHostChange");
1323
qmonMirrorMultiAnswer(EXECHOST_T | USERSET_T | PROJECT_T | CENTRY_T,
1326
qmonMessageBox(w, alp, 0);
1333
XtVaSetValues( eh_name_w,
1336
XmtInputFieldSetString(eh_name_w, "");
1338
** fill the exec host ask dialog with default values
1340
qmonExecHostSetAsk(NULL);
1345
** on opening the dialog fill in the old values
1347
XtVaGetValues( exechost_list,
1348
XmNselectedItems, &ehnames,
1349
XmNselectedItemCount, &ehnum,
1353
XmStringGetLtoR(ehnames[0], XmFONTLIST_DEFAULT_TAG, &ehstr)) {
1354
XmtInputFieldSetString(eh_name_w, ehstr);
1355
XtVaSetValues( eh_name_w,
1358
qmonExecHostSetAsk(ehstr);
1359
XtFree((char*)ehstr);
1364
XtManageChild(eh_ask_layout);
1369
/*-------------------------------------------------------------------------*/
1370
static void qmonExecHostCheckName(Widget w, XtPointer cld, XtPointer cad)
1372
XmtInputFieldCallbackStruct *cbs = (XmtInputFieldCallbackStruct*) cad;
1373
static char unique[CL_MAXHOSTLEN];
1376
DENTER(GUI_LAYER, "qmonExecHostCheckName");
1378
if (cbs->input && cbs->input[0] != '\0' && cbs->input[0] != ' ') {
1380
DPRINTF(("cbs->input = %s\n", cbs->input));
1384
/* try to resolve hostname */
1385
ret=sge_resolve_hostname((const char*)cbs->input, unique, EH_name);
1388
case CL_RETVAL_GETHOSTNAME_ERROR:
1389
qmonMessageShow(w, True, "Can't resolve host '%s'", cbs->input);
1393
cbs->input = unique;
1396
DPRINTF(("sge_resolve_hostname() failed resolving: %s\n", cl_get_error_text(ret)));
1405
/*-------------------------------------------------------------------------*/
1406
static void qmonExecHostCheckScaling(Widget w, XtPointer cld, XtPointer cad)
1408
XbaeMatrixLeaveCellCallbackStruct *cbs =
1409
(XbaeMatrixLeaveCellCallbackStruct*) cad;
1413
DENTER(GUI_LAYER, "qmonExecHostCheckScaling");
1415
if (cbs->column == 1) {
1416
value = atof(cbs->value);
1421
XbaeMatrixSetCellBackground(w, cbs->row, cbs->column, WarningPixel);
1424
XtVaGetValues(w, XmNoddRowBackground, &bg, NULL);
1426
XtVaGetValues(w, XmNevenRowBackground, &bg, NULL);
1427
XbaeMatrixSetCellBackground(w, cbs->row, cbs->column, bg);
1435
/*-------------------------------------------------------------------------*/
1436
static void qmonHostFolderChange(Widget w, XtPointer cld, XtPointer cad)
1438
XmTabCallbackStruct *cbs = (XmTabCallbackStruct *) cad;
1440
DENTER(GUI_LAYER, "qmonHostFolderChange");
1442
DPRINTF(("%s\n", XtName(cbs->tab_child)));
1444
if (!strcmp(XtName(cbs->tab_child), "adminhost_layout"))
1445
dialog_mode = SGE_ADMINHOST_LIST;
1447
if (!strcmp(XtName(cbs->tab_child), "submithost_layout"))
1448
dialog_mode = SGE_SUBMITHOST_LIST;
1450
if (!strcmp(XtName(cbs->tab_child), "hostgroup_layout"))
1451
dialog_mode = SGE_HGROUP_LIST;
1453
if (!strcmp(XtName(cbs->tab_child), "exechost_layout"))
1454
dialog_mode = SGE_EXECHOST_LIST;
1457
updateHostListCB(w, NULL, NULL);
1459
XtSetSensitive(host_modify, (dialog_mode==SGE_EXECHOST_LIST ||
1460
dialog_mode==SGE_HGROUP_LIST) ? True:False);
1461
XtSetSensitive(host_shutdown, (dialog_mode==SGE_EXECHOST_LIST) ? True:False);
1467
/*-------------------------------------------------------------------------*/
1468
/* A C C E S S L I S T P A G E */
1469
/*-------------------------------------------------------------------------*/
1470
static void qmonExecHostAccessToggle(Widget w, XtPointer cld, XtPointer cad)
1472
XmtChooserCallbackStruct *cbs = (XmtChooserCallbackStruct*) cad;
1474
DENTER(GUI_LAYER, "qmonExecHostAccessToggle");
1477
XtSetSensitive(access_allow, False);
1478
XtSetSensitive(access_deny, True);
1481
XtSetSensitive(access_allow, True);
1482
XtSetSensitive(access_deny, False);
1488
/*-------------------------------------------------------------------------*/
1489
static void qmonExecHostAccessAdd(Widget w, XtPointer cld, XtPointer cad)
1491
XmString *selectedItems;
1492
Cardinal selectedItemCount, i;
1497
DENTER(GUI_LAYER, "qmonExecHostAccessAdd");
1499
XtVaGetValues( access_list,
1500
XmNselectedItems, &selectedItems,
1501
XmNselectedItemCount, &selectedItemCount,
1504
if (selectedItemCount) {
1505
/* XmtLayoutDisableLayout(qc_dialog); */
1506
state = XmtChooserGetState(access_toggle);
1511
list = access_allow;
1513
for (i=0; i<selectedItemCount; i++) {
1514
if (!XmStringGetLtoR(selectedItems[i], XmFONTLIST_DEFAULT_TAG, &text))
1516
XmListAddItemUniqueSorted(list, text);
1519
/* XmtLayoutEnableLayout(qc_dialog); */
1525
/*-------------------------------------------------------------------------*/
1526
static void qmonExecHostAccessRemove(Widget w, XtPointer cld, XtPointer cad)
1528
XmString *selectedItems;
1529
Cardinal selectedItemCount;
1533
DENTER(GUI_LAYER, "qmonExecHostAccessRemove");
1535
state = XmtChooserGetState(access_toggle);
1540
list = access_allow;
1542
XtVaGetValues( list,
1543
XmNselectedItems, &selectedItems,
1544
XmNselectedItemCount, &selectedItemCount,
1547
if (selectedItemCount)
1548
XmListDeleteItems(list, selectedItems, selectedItemCount);
1553
/*-------------------------------------------------------------------------*/
1554
/* R E P O R T I N G V A R I A B L E S */
1555
/*-------------------------------------------------------------------------*/
1556
static void qmonExecHostReportVarAdd(Widget w, XtPointer cld, XtPointer cad)
1558
XmString *selectedItems;
1559
Cardinal selectedItemCount, i;
1562
DENTER(GUI_LAYER, "qmonExecHostReportVarAdd");
1564
XtVaGetValues( reporting_variables_list,
1565
XmNselectedItems, &selectedItems,
1566
XmNselectedItemCount, &selectedItemCount,
1569
if (selectedItemCount) {
1570
for (i=0; i<selectedItemCount; i++) {
1571
if (!XmStringGetLtoR(selectedItems[i], XmFONTLIST_DEFAULT_TAG, &text))
1573
XmListAddItemUniqueSorted(reporting_variables_chosen, text);
1581
/*-------------------------------------------------------------------------*/
1582
static void qmonExecHostReportVarRemove(Widget w, XtPointer cld, XtPointer cad)
1584
XmString *selectedItems;
1585
Cardinal selectedItemCount;
1587
DENTER(GUI_LAYER, "qmonExecHostReportVarRemove");
1589
XtVaGetValues( reporting_variables_chosen,
1590
XmNselectedItems, &selectedItems,
1591
XmNselectedItemCount, &selectedItemCount,
1594
if (selectedItemCount)
1595
XmListDeleteItems(reporting_variables_chosen, selectedItems, selectedItemCount);
1600
/*-------------------------------------------------------------------------*/
1601
/* P R O J E C T P A G E */
1602
/*-------------------------------------------------------------------------*/
1603
static void qmonExecHostProjectToggle(Widget w, XtPointer cld, XtPointer cad)
1605
XmtChooserCallbackStruct *cbs = (XmtChooserCallbackStruct*) cad;
1607
DENTER(GUI_LAYER, "qmonExecHostProjectToggle");
1610
XtSetSensitive(project_allow, False);
1611
XtSetSensitive(project_deny, True);
1614
XtSetSensitive(project_allow, True);
1615
XtSetSensitive(project_deny, False);
1621
/*-------------------------------------------------------------------------*/
1622
static void qmonExecHostProjectAdd(Widget w, XtPointer cld, XtPointer cad)
1624
XmString *selectedItems;
1625
Cardinal selectedItemCount, i;
1630
DENTER(GUI_LAYER, "qmonExecHostProjectAdd");
1632
XtVaGetValues( project_list,
1633
XmNselectedItems, &selectedItems,
1634
XmNselectedItemCount, &selectedItemCount,
1637
if (selectedItemCount) {
1638
/* XmtLayoutDisableLayout(qc_dialog); */
1639
state = XmtChooserGetState(project_toggle);
1642
list = project_deny;
1644
list = project_allow;
1646
for (i=0; i<selectedItemCount; i++) {
1647
if (!XmStringGetLtoR(selectedItems[i], XmFONTLIST_DEFAULT_TAG, &text))
1649
XmListAddItemUniqueSorted(list, text);
1652
/* XmtLayoutEnableLayout(qc_dialog); */
1658
/*-------------------------------------------------------------------------*/
1659
static void qmonExecHostProjectRemove(Widget w, XtPointer cld, XtPointer cad)
1661
XmString *selectedItems;
1662
Cardinal selectedItemCount;
1666
DENTER(GUI_LAYER, "qmonExecHostProjectRemove");
1668
state = XmtChooserGetState(project_toggle);
1671
list = project_deny;
1673
list = project_allow;
1675
XtVaGetValues( list,
1676
XmNselectedItems, &selectedItems,
1677
XmNselectedItemCount, &selectedItemCount,
1680
if (selectedItemCount)
1681
XmListDeleteItems(list, selectedItems, selectedItemCount);
1686
/*-------------------------------------------------------------------------*/
1687
static Widget qmonCreateHostgroupAsk(
1690
Widget hg_ok, hg_cancel, hg_ask_layout, hg_add, hg_add_hg,
1693
DENTER(GUI_LAYER, "qmonCreateHostgroupAsk");
1695
hg_ask_layout = XmtBuildQueryDialog(parent, "hg_ask_shell",
1698
"hg_cancel", &hg_cancel,
1699
"hg_name", &hg_name_w,
1700
"hg_memberlist", &hg_memberlist_w,
1701
"hg_hglist", &hg_hglist_w,
1702
"hg_member", &hg_member_w,
1703
"hg_add_hg", &hg_add_hg,
1705
"hg_del_member", &hg_del_member,
1708
XtAddCallback(hg_ok, XmNactivateCallback,
1709
qmonHostgroupOk, NULL);
1710
XtAddCallback(hg_cancel, XmNactivateCallback,
1711
qmonHostgroupCancel, NULL);
1712
XtAddCallback(hg_member_w, XmtNverifyCallback,
1713
qmonHostgroupCheckName, NULL);
1714
XtAddCallback(hg_member_w, XmtNinputCallback,
1715
qmonHostgroupAddHost, NULL);
1716
XtAddCallback(hg_add, XmNactivateCallback,
1717
qmonHostgroupAddHost, NULL);
1718
XtAddCallback(hg_add_hg, XmNactivateCallback,
1719
qmonHostgroupAddHostgroups, NULL);
1720
XtAddCallback(hg_del_member, XmNactivateCallback,
1721
DeleteItems, (XtPointer) hg_memberlist_w);
1723
XtAddEventHandler(XtParent(hg_ask_layout), StructureNotifyMask, False,
1724
SetMinShellSize, NULL);
1727
return hg_ask_layout;
1730
/*-------------------------------------------------------------------------*/
1731
static void qmonHostgroupChange(Widget w, XtPointer cld, XtPointer cad)
1733
long mode = (long) cld;
1739
DENTER(GUI_LAYER, "qmonHostgroupChange");
1741
qmonMirrorMultiAnswer(HGROUP_T, &alp);
1743
qmonMessageBox(w, alp, 0);
1750
XtVaSetValues( hg_name_w,
1753
XmtInputFieldSetString(hg_name_w, "");
1755
** fill the hostgroup ask dialog with default values
1757
qmonHostgroupSetAsk(NULL);
1762
** on opening the dialog fill in the old values
1764
XtVaGetValues( hostgroup_list,
1765
XmNselectedItems, &hgnames,
1766
XmNselectedItemCount, &hgnum,
1770
XmStringGetLtoR(hgnames[0], XmFONTLIST_DEFAULT_TAG, &hgstr)) {
1771
XmtInputFieldSetString(hg_name_w, hgstr);
1772
XtVaSetValues( hg_name_w,
1775
qmonHostgroupSetAsk(hgstr);
1776
XtFree((char*)hgstr);
1781
XtManageChild(hg_ask_layout);
1786
/*-------------------------------------------------------------------------*/
1787
static void qmonHostgroupOk(Widget w, XtPointer cld, XtPointer cad)
1790
StringConst hgname = NULL;
1791
lListElem *hg_ep = NULL;
1792
lList *href_list = NULL;
1794
DENTER(GUI_LAYER, "qmonHostgroupOk");
1797
** get the list with one new host
1799
hgname = XmtInputFieldGetString(hg_name_w);
1800
if (!hgname || hgname[0] == '\0') {
1801
qmonMessageShow(w, True, "@{Empty hostgroup name !}");
1806
href_list = XmStringToCull(hg_memberlist_w, HR_Type, HR_name, ALL_ITEMS);
1807
hg_ep = hgroup_create(&alp, hgname, href_list, true);
1810
hgroup_add_del_mod_via_gdi(ctx, hg_ep, &alp, SGE_GDI_ADD);
1812
hgroup_add_del_mod_via_gdi(ctx, hg_ep, &alp, SGE_GDI_MOD);
1815
if (lFirst(alp) && lGetUlong(lFirst(alp), AN_status) != STATUS_OK) {
1816
qmonMessageBox(w, alp, 0);
1819
XtUnmanageChild(hg_ask_layout);
1820
updateHostListCB(w, NULL, NULL);
1826
/*-------------------------------------------------------------------------*/
1827
static void qmonHostgroupCancel(Widget w, XtPointer cld, XtPointer cad)
1829
DENTER(GUI_LAYER, "qmonHostgroupCancel");
1831
XtUnmanageChild(hg_ask_layout);
1836
/*-------------------------------------------------------------------------*/
1837
static void qmonHostgroupCheckName(Widget w, XtPointer cld, XtPointer cad)
1839
XmtInputFieldCallbackStruct *cbs = (XmtInputFieldCallbackStruct*) cad;
1840
static char unique[CL_MAXHOSTLEN];
1843
DENTER(GUI_LAYER, "qmonHostgroupCheckName");
1845
if (cbs->input && cbs->input[0] != '\0' && cbs->input[0] != ' ') {
1847
DPRINTF(("cbs->input = %s\n", cbs->input));
1851
/* try to resolve hostname */
1852
ret=sge_resolve_hostname((const char*)cbs->input, unique, EH_name);
1855
case CL_RETVAL_GETHOSTNAME_ERROR:
1856
qmonMessageShow(w, True, "Can't resolve host '%s'", cbs->input);
1860
cbs->input = unique;
1863
DPRINTF(("sge_resolve_hostname() failed resolving: %s\n", cl_get_error_text(ret)));
1871
/*-------------------------------------------------------------------------*/
1872
static void qmonHostgroupSetAsk(
1875
lListElem *hgp = NULL;
1878
DENTER(GUI_LAYER, "qmonHostgroupSetAsk");
1880
hgl = qmonMirrorList(SGE_HGROUP_LIST);
1884
** get the selected hostgroup element
1886
hgp = hgroup_list_locate(hgl, name);
1888
/* set name field */
1889
XmtInputFieldSetString(hg_name_w, name);
1891
UpdateXmListFromCull(hg_memberlist_w, XmFONTLIST_DEFAULT_TAG,
1892
lGetList(hgp, HGRP_host_list), HR_name);
1896
UpdateXmListFromCull(hg_memberlist_w, XmFONTLIST_DEFAULT_TAG,
1898
XmtInputFieldSetString(hg_name_w, "");
1903
** hostgroups that would create a cycle should be suppressed
1905
UpdateXmListFromCull(hg_hglist_w, XmFONTLIST_DEFAULT_TAG,
1911
/*-------------------------------------------------------------------------*/
1912
static void qmonHostgroupSelect(Widget w, XtPointer cld, XtPointer cad)
1914
XmListCallbackStruct *cbs = (XmListCallbackStruct*) cad;
1918
DENTER(GUI_LAYER, "qmonHostgroupSelect");
1920
if (! XmStringGetLtoR(cbs->item, XmFONTLIST_DEFAULT_TAG, &hgname)) {
1921
fprintf(stderr, "XmStringGetLtoR failed\n");
1926
hgp = hgroup_list_locate(qmonMirrorList(SGE_HGROUP_LIST), hgname);
1927
XtFree((char*) hgname);
1930
UpdateXmListFromCull(hostgroup_memberlist, XmFONTLIST_DEFAULT_TAG,
1931
lGetList(hgp, HGRP_host_list), HR_name);
1936
/*-------------------------------------------------------------------------*/
1937
static void qmonHostgroupAddHost(Widget w, XtPointer cld, XtPointer cad)
1941
DENTER(GUI_LAYER, "qmonHostgroupAddHost");
1943
host = XmtInputFieldGetString(hg_member_w);
1945
if (host && host[0] != '\0') {
1946
XmListAddItemUniqueSorted(hg_memberlist_w, host);
1949
XmtInputFieldSetString(hg_member_w, "");
1954
/*-------------------------------------------------------------------------*/
1955
static void qmonHostgroupAddHostgroups(Widget w, XtPointer cld, XtPointer cad)
1958
XmString *items = NULL;
1959
Cardinal itemCount = 0;
1961
DENTER(GUI_LAYER, "qmonHostgroupAddHostgroups");
1963
XtVaGetValues( hg_hglist_w,
1964
XmNselectedItems, &items,
1965
XmNselectedItemCount, &itemCount,
1967
for (i=0; i<itemCount; i++) {
1968
XmListAddXmStringUniqueSorted(hg_memberlist_w, items[i]);