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__*/
36
#include "sge_usage.h"
38
/****** sgeobj/usage/usage_list_get_ulong_usage() *****************************
40
* usage_list_get_ulong_usage() -- return ulong usage value
44
* usage_list_get_ulong_usage(const lList *usage_list, const char *name,
48
* Searches a usage object with the given name in the given usage
49
* list. If such an element is found, returns the value of the
50
* usage object as u_long32 value.
51
* If no such element is found, return the given default value.
54
* const lList *usage_list - the usage list
55
* const char *name - name of the element to search
56
* u_long32 def - default value
59
* u_long32 - value of found object or default
62
* gdi/usage/usage_list_get_double_usage()
63
*******************************************************************************/
65
usage_list_get_ulong_usage(const lList *usage_list, const char *name,
68
lListElem *ep = lGetElemStr(usage_list, UA_name, name);
70
return (u_long32)lGetDouble(ep, UA_value);
76
/****** sgeobj/usage/usage_list_get_double_usage() ****************************
78
* usage_list_get_double_usage() -- return double usage value
82
* usage_list_get_double_usage(const lList *usage_list, const char *name,
86
* Searches a usage object with the given name in the given usage
87
* list. If such an element is found, returns the value of the
88
* usage object as double value.
89
* If no such element is found, return the given default value.
92
* const lList *usage_list - the usage list
93
* const char *name - name of the element to search
94
* double def - default value
97
* double - value of found object or default
100
* gdi/usage/usage_list_get_ulong_usage()
101
*******************************************************************************/
103
usage_list_get_double_usage(const lList *usage_list, const char *name,
106
lListElem *ep = lGetElemStr(usage_list, UA_name, name);
108
return lGetDouble(ep, UA_value);
114
/****** sgeobj/usage/usage_list_set_ulong_usage() ******************************
116
* usage_list_set_ulong_usage() -- create/update a usage record
120
* usage_list_set_ulong_usage(lList *usage_list, const char *name,
124
* Updates the value of a usage record. If no usage record exists with the
125
* given name in usage_list, a new record is created.
128
* lList *usage_list - list containing the usage record to update
129
* const char *name - name of the usage record to update
130
* u_long32 value - the new value
133
* MT-NOTE: usage_list_set_ulong_usage() is MT safe
136
* sgeobj/usage/usage_list_set_double_usage()
137
* sgeobj/usage/usage_list_get_ulong_usage()
138
* sgeobj/usage/usage_list_get_double_usage()
139
*******************************************************************************/
141
usage_list_set_ulong_usage(lList *usage_list, const char *name, u_long32 value)
143
usage_list_set_double_usage(usage_list, name, value);
146
/****** sgeobj/usage/usage_list_set_double_usage() ******************************
148
* usage_list_set_double_usage() -- create/update a usage record
152
* usage_list_set_double_usage(lList *usage_list, const char *name,
156
* Updates the value of a usage record. If no usage record exists with the
157
* given name in usage_list, a new record is created.
160
* lList *usage_list - list containing the usage record to update
161
* const char *name - name of the usage record to update
162
* double value - the new value
165
* MT-NOTE: usage_list_set_double_usage() is MT safe
168
* sgeobj/usage/usage_list_set_ulong_usage()
169
* sgeobj/usage/usage_list_get_ulong_usage()
170
* sgeobj/usage/usage_list_get_double_usage()
171
*******************************************************************************/
173
usage_list_set_double_usage(lList *usage_list, const char *name, double value)
175
lListElem *ep = lGetElemStr(usage_list, UA_name, name);
177
ep = lAddElemStr(&usage_list, UA_name, name, UA_Type);
180
lSetDouble(ep, UA_value, value);
183
/****** sge_usage/usage_list_sum() *********************************************
185
* usage_list_sum() -- sum up usage of two lists
189
* usage_list_sum(lList *usage_list, const lList *add_usage_list)
192
* Add the usage reported in add_usage_list to usage_list.
193
* Summing up of usage will only be done for certain attributes:
200
* - all ru_* attributes (see man getrusage.2)
203
* lList *usage_list - the usage list to contain all usage
204
* const lList *add_usage_list - usage to add to usage_list
207
* MT-NOTE: usage_list_sum() is MT safe
208
*******************************************************************************/
210
usage_list_sum(lList *usage_list, const lList *add_usage_list)
212
const lListElem *usage;
214
for_each(usage, add_usage_list) {
215
const char *name = lGetString(usage, UA_name);
216
/* Sum up all usage attributes. */
217
if (strcmp(name, USAGE_ATTR_CPU) == 0 ||
218
strcmp(name, USAGE_ATTR_IO) == 0 ||
219
strcmp(name, USAGE_ATTR_IOW) == 0 ||
220
strcmp(name, USAGE_ATTR_VMEM) == 0 ||
221
strcmp(name, USAGE_ATTR_MAXVMEM) == 0 ||
222
strcmp(name, USAGE_ATTR_MEM) == 0 ||
223
strncmp(name, "ru_", 3) == 0) {
224
lListElem *sum = lGetElemStr(usage_list, UA_name, name);
226
lAppendElem(usage_list, lCopyElem(usage));
228
lAddDouble(sum, UA_value, lGetDouble(usage, UA_value));