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
7
* Sun Microsystems Inc., March, 2001
10
* Sun Industry Standards Source License Version 1.2
11
* =================================================
12
* The contents of this file are subject to the Sun Industry Standards
13
* Source License Version 1.2 (the "License"); You may not use this file
14
* except in compliance with the License. You may obtain a copy of the
15
* License at http://gridengine.sunsource.net/Gridengine_SISSL_license.html
17
* Software provided under this License is provided on an "AS IS" basis,
18
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
19
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
20
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
21
* See the License for the specific provisions governing your rights and
22
* obligations concerning the Software.
24
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
26
* Copyright: 2001 by Sun Microsystems, Inc.
28
* All Rights Reserved.
30
************************************************************************/
31
/*___INFO__MARK_END__*/
35
#include "basis_types.h"
39
#include "sgeobj/sge_answer.h"
40
#include "sgeobj/sge_advance_reservation.h"
42
#include "qrstat_filter.h"
43
#include "qrstat_report_handler.h"
44
#include "qrstat_report_handler_xml.h"
46
#include "msg_common.h"
48
#define SFN_FIRST_COLUMN "%-30.30s"
51
qrstat_report_start(qrstat_report_handler_t* handler, lList **alpp);
54
qrstat_report_finish(qrstat_report_handler_t* handler, lList **alpp);
57
qrstat_report_start_ar(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp);
60
qrstat_report_start_unknown_ar(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp);
63
qrstat_report_finish_ar(qrstat_report_handler_t* handler, lList **alpp);
66
qrstat_report_finish_unknown_ar(qrstat_report_handler_t* handler, lList **alpp);
69
qrstat_report_ar_node_ulong(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp,
70
const char *name, u_long32 value);
73
qrstat_report_ar_node_ulong_unknown(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp,
74
const char *name, u_long32 value);
77
qrstat_report_ar_node_duration(qrstat_report_handler_t* handler, lList **alpp,
78
const char *name, u_long32 value);
81
qrstat_report_ar_node_string(qrstat_report_handler_t* handler, lList **alpp,
82
const char *name, const char *value);
85
qrstat_report_ar_node_time(qrstat_report_handler_t* handler, lList **alpp,
86
const char *name, time_t value);
89
qrstat_report_ar_node_state(qrstat_report_handler_t* handler, lList **alpp,
90
const char *name, u_long32 value);
93
qrstat_report_start_resource_list(qrstat_report_handler_t* handler, lList **alpp);
96
qrstat_report_finish_resource_list(qrstat_report_handler_t* handler, lList **alpp);
99
qrstat_report_resource_list_node(qrstat_report_handler_t* handler, lList **alpp,
100
const char *name, const char *value);
103
qrstat_report_ar_node_boolean(qrstat_report_handler_t* handler, lList **alpp,
104
const char *name, bool value);
107
qrstat_report_start_granted_slots_list(qrstat_report_handler_t* handler, lList **alpp);
110
qrstat_report_finish_granted_slots_list(qrstat_report_handler_t* handler, lList **alpp);
113
qrstat_report_granted_slots_list_node(qrstat_report_handler_t* handler,
115
const char *name, u_long32 value);
118
qrstat_report_start_granted_parallel_environment(qrstat_report_handler_t* handler, lList **alpp);
121
qrstat_report_finish_granted_parallel_environment(qrstat_report_handler_t* handler, lList **alpp);
124
qrstat_report_granted_parallel_environment_node(qrstat_report_handler_t* handler,
126
const char *name, const char *slots_range);
128
qrstat_report_start_mail_list(qrstat_report_handler_t* handler, lList **alpp);
131
qrstat_report_finish_mail_list(qrstat_report_handler_t* handler, lList **alpp);
134
qrstat_report_mail_list_node(qrstat_report_handler_t* handler,
136
const char *name, const char *hostname);
139
qrstat_report_start_acl_list(qrstat_report_handler_t* handler, lList **alpp);
142
qrstat_report_finish_acl_list(qrstat_report_handler_t* handler, lList **alpp);
145
qrstat_report_acl_list_node(qrstat_report_handler_t* handler,
146
lList **alpp, const char *name);
149
qrstat_report_start_xacl_list(qrstat_report_handler_t* handler, lList **alpp);
152
qrstat_report_finish_xacl_list(qrstat_report_handler_t* handler, lList **alpp);
155
qrstat_report_xacl_list_node(qrstat_report_handler_t* handler,
156
lList **alpp, const char *name);
159
qrstat_report_newline(qrstat_report_handler_t* handler, lList **alpp);
162
qrstat_report_handler_t *
163
qrstat_create_report_handler_stdout(qrstat_env_t *qrstat_env,
166
qrstat_report_handler_t* ret = NULL;
168
DENTER(TOP_LAYER, "qrstat_create_report_handler_stdout");
170
ret = (qrstat_report_handler_t*)sge_malloc(sizeof(qrstat_report_handler_t));
172
answer_list_add_sprintf(answer_list, STATUS_EMALLOC, ANSWER_QUALITY_ERROR,
173
MSG_MEM_MEMORYALLOCFAILED_S, SGE_FUNC);
176
* report handler ctx is stdout
180
ret->show_summary = qrstat_env->is_summary;
182
ret->report_start = qrstat_report_start;
183
ret->report_finish = qrstat_report_finish;
184
ret->report_start_ar = qrstat_report_start_ar;
185
ret->report_start_unknown_ar = qrstat_report_start_unknown_ar;
186
ret->report_finish_ar = qrstat_report_finish_ar;
187
ret->report_finish_unknown_ar = qrstat_report_finish_unknown_ar;
188
ret->report_ar_node_ulong = qrstat_report_ar_node_ulong;
189
ret->report_ar_node_ulong_unknown = qrstat_report_ar_node_ulong_unknown;
190
ret->report_ar_node_duration = qrstat_report_ar_node_duration;
191
ret->report_ar_node_string = qrstat_report_ar_node_string;
192
ret->report_ar_node_time = qrstat_report_ar_node_time;
193
ret->report_ar_node_state = qrstat_report_ar_node_state;
195
ret->report_start_resource_list = qrstat_report_start_resource_list;
196
ret->report_finish_resource_list = qrstat_report_finish_resource_list;
197
ret->report_resource_list_node = qrstat_report_resource_list_node;
199
ret->report_ar_node_boolean = qrstat_report_ar_node_boolean;
201
ret->report_start_granted_slots_list = qrstat_report_start_granted_slots_list;
202
ret->report_finish_granted_slots_list = qrstat_report_finish_granted_slots_list;
203
ret->report_granted_slots_list_node = qrstat_report_granted_slots_list_node;
205
ret->report_start_granted_parallel_environment = qrstat_report_start_granted_parallel_environment;
206
ret->report_finish_granted_parallel_environment = qrstat_report_finish_granted_parallel_environment;
207
ret->report_granted_parallel_environment_node = qrstat_report_granted_parallel_environment_node;
209
ret->report_start_mail_list = qrstat_report_start_mail_list;
210
ret->report_finish_mail_list = qrstat_report_finish_mail_list;
211
ret->report_mail_list_node = qrstat_report_mail_list_node;
213
ret->report_start_acl_list = qrstat_report_start_acl_list;
214
ret->report_finish_acl_list = qrstat_report_finish_acl_list;
215
ret->report_acl_list_node = qrstat_report_acl_list_node;
217
ret->report_start_xacl_list = qrstat_report_start_xacl_list;
218
ret->report_finish_xacl_list = qrstat_report_finish_xacl_list;
219
ret->report_xacl_list_node = qrstat_report_xacl_list_node;
220
ret->report_newline = qrstat_report_newline;
227
qrstat_destroy_report_handler_stdout(qrstat_report_handler_t** handler, lList **answer_list)
231
DENTER(TOP_LAYER, "qrstat_destroy_report_handler");
233
if (handler != NULL && *handler != NULL ) {
241
qrstat_report_start(qrstat_report_handler_t* handler, lList **alpp)
245
DENTER(TOP_LAYER, "qrstat_report_start");
250
qrstat_report_finish(qrstat_report_handler_t* handler, lList **alpp)
254
DENTER(TOP_LAYER, "qrstat_report_finish");
259
qrstat_report_start_ar(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp)
262
FILE *out = (FILE*)handler->ctx;
264
DENTER(TOP_LAYER, "qrstat_report_start");
266
if (handler->show_summary == false) {
267
fprintf(out, "----------");
268
fprintf(out, "----------");
269
fprintf(out, "----------");
270
fprintf(out, "----------");
271
fprintf(out, "----------");
272
fprintf(out, "----------");
273
fprintf(out, "----------");
274
fprintf(out, "----------\n");
275
} else if (!qrstat_env->header_printed) {
276
const char *head_format = "%-7.7s %-10.10s %-12.12s %-5.5s %-20.20s %-20.20s %8s\n";
278
fprintf(out, head_format, "ar-id", "name", "owner", "state", "start at",
279
"end at", "duration");
280
fprintf(out, "----------------------------------------"
281
"--------------------------------------------------\n");
282
qrstat_env->header_printed = true;
289
qrstat_report_start_unknown_ar(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp)
292
FILE *out = (FILE*)handler->ctx;
294
DENTER(TOP_LAYER, "qrstat_report_unknown_start");
296
if (!qrstat_env->header_printed) {
297
fprintf(out, "Following advance reservations do not exist:\n");
304
qrstat_report_finish_ar(qrstat_report_handler_t* handler, lList **alpp)
307
FILE *out = (FILE*)handler->ctx;
309
DENTER(TOP_LAYER, "qrstat_report_finish_ar");
310
if (handler->show_summary) {
317
qrstat_report_finish_unknown_ar(qrstat_report_handler_t* handler, lList **alpp)
321
DENTER(TOP_LAYER, "qrstat_report_finish_unknown_ar");
326
qrstat_report_ar_node_ulong(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp,
327
const char *name, u_long32 value)
330
FILE *out = (FILE*)handler->ctx;
332
DENTER(TOP_LAYER, "qrstat_report_ar_node_ulong");
333
if (handler->show_summary) {
334
fprintf(out, "%7" sge_U32CLetter " ", sge_u32c(value));
336
fprintf(out, SFN_FIRST_COLUMN" "sge_U32CFormat"\n", name, sge_u32c(value));
342
qrstat_report_ar_node_ulong_unknown(qrstat_report_handler_t* handler, qrstat_env_t *qrstat_env, lList **alpp,
343
const char *name, u_long32 value)
346
FILE *out = (FILE*)handler->ctx;
348
DENTER(TOP_LAYER, "qrstat_report_ar_node_ulong_unknown");
349
if (qrstat_env->header_printed) {
352
qrstat_env->header_printed = true;
354
fprintf(out, sge_U32CFormat, sge_u32c(value));
360
qrstat_report_ar_node_duration(qrstat_report_handler_t* handler, lList **alpp,
361
const char *name, u_long32 value)
364
FILE *out = (FILE*)handler->ctx;
365
int seconds = value % 60;
366
int minutes = ((value - seconds) / 60) % 60;
367
int hours = ((value - seconds - minutes * 60) / 3600);
369
DENTER(TOP_LAYER, "qrstat_report_ar_node_duration");
371
if (handler->show_summary) {
372
fprintf(out, "%02d:%02d:%02d", hours, minutes, seconds);
374
fprintf(out, SFN_FIRST_COLUMN" %02d:%02d:%02d\n", name, hours, minutes, seconds);
381
qrstat_report_ar_node_string(qrstat_report_handler_t* handler, lList **alpp,
382
const char *name, const char *value)
385
FILE *out = (FILE*)handler->ctx;
387
DENTER(TOP_LAYER, "qrstat_report_ar_node_string");
391
if (handler->show_summary) {
392
if (strcmp("owner", name) == 0) {
393
fprintf(out, "%-12.12s ", value);
394
} else if (strcmp("name", name) == 0) {
395
fprintf(out, "%-10.10s ", value);
396
} else if (strcmp("message", name) == 0) {
397
fprintf(out, "\n "SFN, value);
400
fprintf(out, SFN_FIRST_COLUMN" " SFN"\n", name, value);
406
qrstat_report_ar_node_time(qrstat_report_handler_t* handler, lList **alpp,
407
const char *name, time_t value)
410
FILE *out = (FILE*)handler->ctx;
411
dstring time_string = DSTRING_INIT;
413
DENTER(TOP_LAYER, "qrstat_report_ar_node_time");
415
sge_dstring_append_time(&time_string, value, false);
416
if (handler->show_summary) {
417
if (strcmp("start_time", name) == 0 || strcmp("end_time", name) == 0) {
418
fprintf(out, "%-20.20s ", sge_dstring_get_string(&time_string));
421
fprintf(out, SFN_FIRST_COLUMN" "SFN"\n", name, sge_dstring_get_string(&time_string));
423
sge_dstring_free(&time_string);
429
qrstat_report_ar_node_state(qrstat_report_handler_t* handler, lList **alpp,
430
const char *name, u_long32 state)
433
FILE *out = (FILE*)handler->ctx;
434
dstring state_string = DSTRING_INIT;
436
DENTER(TOP_LAYER, "qrstat_report_ar_node_time");
438
ar_state2dstring((ar_state_t)state, &state_string);
439
if (handler->show_summary) {
440
fprintf(out, "%-5.5s ", sge_dstring_get_string(&state_string));
442
fprintf(out, SFN_FIRST_COLUMN" "SFN"\n", name, sge_dstring_get_string(&state_string));
444
sge_dstring_free(&state_string);
450
qrstat_report_start_resource_list(qrstat_report_handler_t* handler, lList **alpp)
453
FILE *out = (FILE*)handler->ctx;
455
DENTER(TOP_LAYER, "qrstat_report_start_resource_list");
456
if (!handler->show_summary) {
457
fprintf(out, SFN_FIRST_COLUMN" ", "resource_list");
458
handler->first_resource = true;
464
qrstat_report_finish_resource_list(qrstat_report_handler_t* handler, lList **alpp)
467
FILE *out = (FILE*)handler->ctx;
469
DENTER(TOP_LAYER, "qrstat_report_finish_resource_list");
470
if (!handler->show_summary) {
477
qrstat_report_resource_list_node(qrstat_report_handler_t* handler, lList **alpp,
478
const char *name, const char *value)
481
FILE *out = (FILE*)handler->ctx;
483
DENTER(TOP_LAYER, "qrstat_report_resource_list_node");
484
if (!handler->show_summary) {
485
fprintf(out, SFN SFN"="SFN, (handler->first_resource ? "" : ", "), name, value);
486
if (handler->first_resource) {
487
handler->first_resource = false;
494
qrstat_report_ar_node_boolean(qrstat_report_handler_t* handler, lList **alpp, const char *name, bool value)
497
FILE *out = (FILE*)handler->ctx;
498
const char* chvalue = value ? "true":"false";
500
DENTER(TOP_LAYER, "qrstat_report_ar_node_boolean");
501
if (handler->show_summary) {
502
fprintf(out, " "SFN, chvalue);
504
fprintf(out, SFN_FIRST_COLUMN" "SFN"\n", name, chvalue);
512
qrstat_report_start_granted_slots_list(qrstat_report_handler_t* handler, lList **alpp)
515
FILE *out = (FILE*)handler->ctx;
517
DENTER(TOP_LAYER, "qrstat_report_start_granted_slots_list");
518
if (!handler->show_summary) {
519
fprintf(out, SFN_FIRST_COLUMN" ", "granted_slots_list");
520
handler->first_granted_slot = true;
526
qrstat_report_finish_granted_slots_list(qrstat_report_handler_t* handler, lList **alpp)
529
FILE *out = (FILE*)handler->ctx;
531
DENTER(TOP_LAYER, "qrstat_report_finish_granted_slots_list");
532
if (!handler->show_summary) {
539
qrstat_report_granted_slots_list_node(qrstat_report_handler_t* handler,
541
const char *name, u_long32 value)
544
FILE *out = (FILE*)handler->ctx;
546
DENTER(TOP_LAYER, "qrstat_report_granted_slots_list_node");
547
if (!handler->show_summary) {
548
fprintf(out, SFN SFN"="sge_U32CFormat, (handler->first_granted_slot ? "" : ","), name, sge_u32c(value));
549
if (handler->first_granted_slot) {
550
handler->first_granted_slot = false;
557
qrstat_report_start_granted_parallel_environment(qrstat_report_handler_t* handler, lList **alpp)
560
FILE *out = (FILE*)handler->ctx;
562
DENTER(TOP_LAYER, "qrstat_report_start_granted_parallel_environment");
563
if (!handler->show_summary) {
564
fprintf(out, SFN_FIRST_COLUMN" ", "granted_parallel_environment");
570
qrstat_report_finish_granted_parallel_environment(qrstat_report_handler_t* handler, lList **alpp)
573
FILE *out = (FILE*)handler->ctx;
575
DENTER(TOP_LAYER, "qrstat_report_finish_parallel_environment");
576
if (!handler->show_summary) {
583
qrstat_report_granted_parallel_environment_node(qrstat_report_handler_t* handler,
585
const char *name, const char *slots_range)
588
FILE *out = (FILE*)handler->ctx;
590
DENTER(TOP_LAYER, "qrstat_report_granted_granted_parallel_environment_node");
591
if (!handler->show_summary) {
592
fprintf(out, SFN" slots "SFN, name, slots_range);
598
qrstat_report_start_mail_list(qrstat_report_handler_t* handler, lList **alpp)
601
FILE *out = (FILE*)handler->ctx;
603
DENTER(TOP_LAYER, "qrstat_report_start_mail_list");
604
if (!handler->show_summary) {
605
fprintf(out, SFN_FIRST_COLUMN" ", "mail_list");
606
handler->first_mail = true;
612
qrstat_report_finish_mail_list(qrstat_report_handler_t* handler, lList **alpp)
615
FILE *out = (FILE*)handler->ctx;
617
DENTER(TOP_LAYER, "qrstat_report_finish_mail_list");
618
if (!handler->show_summary) {
625
qrstat_report_mail_list_node(qrstat_report_handler_t* handler,
627
const char *name, const char *host)
630
FILE *out = (FILE*)handler->ctx;
632
DENTER(TOP_LAYER, "qrstat_report_mail_list_node");
633
if (!handler->show_summary) {
634
fprintf(out, SFN SFN"@"SFN, (handler->first_mail ? "" : ","), name?name:"", host?host:"");
635
if (handler->first_mail) {
636
handler->first_mail = false;
643
qrstat_report_start_acl_list(qrstat_report_handler_t* handler, lList **alpp)
646
FILE *out = (FILE*)handler->ctx;
648
DENTER(TOP_LAYER, "qrstat_report_start_acl_list");
649
if (!handler->show_summary) {
650
fprintf(out, SFN_FIRST_COLUMN" ", "acl_list");
651
handler->first_acl = true;
657
qrstat_report_finish_acl_list(qrstat_report_handler_t* handler, lList **alpp)
660
FILE *out = (FILE*)handler->ctx;
662
DENTER(TOP_LAYER, "qrstat_report_finish_acl_list");
663
if (!handler->show_summary) {
670
qrstat_report_acl_list_node(qrstat_report_handler_t* handler,
675
FILE *out = (FILE*)handler->ctx;
677
DENTER(TOP_LAYER, "qrstat_report_acl_list_node");
678
if (!handler->show_summary) {
679
fprintf(out, SFN SFN, (handler->first_acl ? "" : ","), name);
680
if (handler->first_acl) {
681
handler->first_acl = false;
688
qrstat_report_start_xacl_list(qrstat_report_handler_t* handler, lList **alpp)
691
FILE *out = (FILE*)handler->ctx;
693
DENTER(TOP_LAYER, "qrstat_report_start_xacl_list");
694
if (!handler->show_summary) {
695
fprintf(out, SFN_FIRST_COLUMN" ", "xacl_list");
696
handler->first_xacl = true;
702
qrstat_report_finish_xacl_list(qrstat_report_handler_t* handler, lList **alpp)
705
FILE *out = (FILE*)handler->ctx;
707
DENTER(TOP_LAYER, "qrstat_report_finish_xacl_list");
708
if (!handler->show_summary) {
715
qrstat_report_xacl_list_node(qrstat_report_handler_t* handler,
720
FILE *out = (FILE*)handler->ctx;
722
DENTER(TOP_LAYER, "qrstat_report_xacl_list_node");
723
if (!handler->show_summary) {
724
fprintf(out, SFN SFN, (handler->first_xacl ? "" : ","), name);
725
if (handler->first_xacl) {
726
handler->first_xacl = false;
733
qrstat_report_newline(qrstat_report_handler_t* handler, lList **alpp)
736
FILE *out = (FILE*)handler->ctx;
738
DENTER(TOP_LAYER, "qrstat_report_newline");