27
27
#include < stdlib.h> /* getexecname() */
28
28
#include < strings.h> /* strncpy() */
29
29
30
- #include < kstat.h>
31
- #include < errno.h>
32
- #include < inttypes.h>
33
- #include < sys/types.h>
34
30
35
31
#if (!defined(_LP64)) && (_FILE_OFFSET_BITS - 0 == 64)
36
32
#define PROCFS_FILE_OFFSET_BITS_HACK 1
@@ -50,7 +46,6 @@ namespace node {
50
46
51
47
using namespace v8 ;
52
48
53
-
54
49
char ** Platform::SetupArgs (int argc, char *argv[]) {
55
50
return argv;
56
51
}
@@ -113,103 +108,11 @@ int Platform::GetExecutablePath(char* buffer, size_t* size) {
113
108
}
114
109
115
110
116
- static Handle <Value> data_named (kstat_named_t *knp) {
117
- Handle <Value> val;
118
-
119
- switch (knp->data_type ) {
120
- case KSTAT_DATA_CHAR:
121
- val = Number::New (knp->value .c [0 ]);
122
- break ;
123
- case KSTAT_DATA_INT32:
124
- val = Number::New (knp->value .i32 );
125
- break ;
126
- case KSTAT_DATA_UINT32:
127
- val = Number::New (knp->value .ui32 );
128
- break ;
129
- case KSTAT_DATA_INT64:
130
- val = Number::New (knp->value .i64 );
131
- break ;
132
- case KSTAT_DATA_UINT64:
133
- val = Number::New (knp->value .ui64 );
134
- break ;
135
- case KSTAT_DATA_STRING:
136
- val = String::New (KSTAT_NAMED_STR_PTR (knp));
137
- break ;
138
- default :
139
- throw (String::New (" unrecognized data type" ));
140
- }
141
-
142
- return (val);
143
- }
111
+ // TODO: libkstat provides all this info. Need to link it though.
144
112
145
113
146
114
int Platform::GetCPUInfo (Local<Array> *cpus) {
147
- HandleScope scope;
148
- Local<Object> cpuinfo;
149
- Local<Object> cputimes;
150
-
151
- int lookup_instance;
152
- kstat_ctl_t *kc;
153
- kstat_t *ksp;
154
- kstat_named_t *knp;
155
-
156
- if ((kc = kstat_open ()) == NULL )
157
- throw " could not open kstat" ;
158
-
159
- *cpus = Array::New ();
160
-
161
- lookup_instance = 0 ;
162
- while (ksp = kstat_lookup (kc, " cpu_info" , lookup_instance, NULL )) {
163
- cpuinfo = Object::New ();
164
-
165
- if (kstat_read (kc, ksp, NULL ) == -1 ) {
166
- /*
167
- * It is deeply annoying, but some kstats can return errors
168
- * under otherwise routine conditions. (ACPI is one
169
- * offender; there are surely others.) To prevent these
170
- * fouled kstats from completely ruining our day, we assign
171
- * an "error" member to the return value that consists of
172
- * the strerror().
173
- */
174
- cpuinfo->Set (String::New (" error" ), String::New (strerror (errno)));
175
- (*cpus)->Set (lookup_instance, cpuinfo);
176
- } else {
177
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " clock_MHz" );
178
- cpuinfo->Set (String::New (" speed" ), data_named (knp));
179
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " brand" );
180
- cpuinfo->Set (String::New (" model" ), data_named (knp));
181
- (*cpus)->Set (lookup_instance, cpuinfo);
182
- }
183
-
184
- lookup_instance++;
185
- }
186
-
187
- lookup_instance = 0 ;
188
- while (ksp = kstat_lookup (kc, " cpu" , lookup_instance, " sys" )){
189
- cpuinfo = (*cpus)->Get (lookup_instance)->ToObject ();
190
- cputimes = Object::New ();
191
-
192
- if (kstat_read (kc, ksp, NULL ) == -1 ) {
193
- cputimes->Set (String::New (" error" ), String::New (strerror (errno)));
194
- cpuinfo->Set (String::New (" times" ), cpuinfo);
195
- } else {
196
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " cpu_ticks_kernel" );
197
- cputimes->Set (String::New (" system" ), data_named (knp));
198
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " cpu_ticks_user" );
199
- cputimes->Set (String::New (" user" ), data_named (knp));
200
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " cpu_ticks_idle" );
201
- cputimes->Set (String::New (" idle" ), data_named (knp));
202
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " intr" );
203
- cputimes->Set (String::New (" irq" ), data_named (knp));
204
-
205
- cpuinfo->Set (String::New (" times" ), cputimes);
206
- }
207
-
208
- lookup_instance++;
209
- }
210
-
211
- kstat_close (kc);
212
-
115
+ // http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/cmd/psrinfo/psrinfo.pl
213
116
return 0 ;
214
117
}
215
118
@@ -225,29 +128,8 @@ double Platform::GetTotalMemory() {
225
128
226
129
227
130
double Platform::GetUptime () {
228
- kstat_ctl_t *kc;
229
- kstat_t *ksp;
230
- kstat_named_t *knp;
231
-
232
- long hz = sysconf (_SC_CLK_TCK);
233
- ulong_t clk_intr;
234
-
235
- if ((kc = kstat_open ()) == NULL ) {
236
- throw " could not open kstat" ;
237
- }
238
-
239
- ksp = kstat_lookup (kc, " unix" , 0 , " system_misc" );
240
-
241
- if (kstat_read (kc, ksp, NULL ) == -1 ) {
242
- throw " unable to read kstat" ;
243
- } else {
244
- knp = (kstat_named_t *) kstat_data_lookup (ksp, " clk_intr" );
245
- clk_intr = knp->value .ul ;
246
- }
247
-
248
- kstat_close (kc);
249
-
250
- return static_cast <double >(clk_intr / hz);
131
+ // http://munin-monitoring.org/attachment/ticket/419/uptime
132
+ return 0.0 ;
251
133
}
252
134
253
135
@@ -256,11 +138,5 @@ int Platform::GetLoadAvg(Local<Array> *loads) {
256
138
}
257
139
258
140
259
- Handle <Value> Platform::GetInterfaceAddresses () {
260
- HandleScope scope;
261
- return scope.Close (Object::New ());
262
- }
263
-
264
-
265
141
} // namespace node
266
142
0 commit comments