Platform.c 2.14 KB
Newer Older
Hisham Muhammad's avatar
Hisham Muhammad committed
1
/*
Hisham Muhammad's avatar
Hisham Muhammad committed
2
htop - freebsd/Platform.c
Hisham Muhammad's avatar
Hisham Muhammad committed
3
4
5
6
7
8
(C) 2014 Hisham H. Muhammad
Released under the GNU GPL, see the COPYING file
in the source distribution for its full text.
*/

#include "Platform.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
9
10
11
12
13
14
15
16
17
18
#include "Meter.h"
#include "CPUMeter.h"
#include "MemoryMeter.h"
#include "SwapMeter.h"
#include "TasksMeter.h"
#include "LoadAverageMeter.h"
#include "UptimeMeter.h"
#include "BatteryMeter.h"
#include "ClockMeter.h"
#include "HostnameMeter.h"
Hisham Muhammad's avatar
Hisham Muhammad committed
19

Hisham Muhammad's avatar
Hisham Muhammad committed
20
21
22
#include <sys/types.h>
#include <sys/sysctl.h>
#include <sys/time.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
23
24
#include <sys/resource.h>
#include <vm/vm_param.h>
Hisham Muhammad's avatar
Hisham Muhammad committed
25
26
#include <time.h>

Hisham Muhammad's avatar
Hisham Muhammad committed
27
28
29
30
31
32
33
34
/*{
#include "Action.h"
}*/

void Platform_setBindings(Htop_Action* keys) {
   (void) keys;
}

Hisham Muhammad's avatar
Hisham Muhammad committed
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
MeterClass* Platform_meterTypes[] = {
   &CPUMeter_class,
   &ClockMeter_class,
   &LoadAverageMeter_class,
   &LoadMeter_class,
   &MemoryMeter_class,
   &SwapMeter_class,
   &TasksMeter_class,
   &UptimeMeter_class,
   &BatteryMeter_class,
   &HostnameMeter_class,
   &AllCPUsMeter_class,
   &AllCPUs2Meter_class,
   &LeftCPUsMeter_class,
   &RightCPUsMeter_class,
   &LeftCPUs2Meter_class,
   &RightCPUs2Meter_class,
   &BlankMeter_class,
   NULL
};

Hisham Muhammad's avatar
Hisham Muhammad committed
56
57
58
59
60
61
62
63
64
65
66
67
68
int Platform_getUptime() {
   struct timeval bootTime, currTime;
   int mib[2] = { CTL_KERN, KERN_BOOTTIME };
   size_t size = sizeof(bootTime);
   
   int err = sysctl(mib, 2, &bootTime, &size, NULL, 0);
   if (err) {
      return -1;
   }
   gettimeofday(&currTime, NULL);

   return (int) difftime(currTime.tv_sec, bootTime.tv_sec);
}
Hisham Muhammad's avatar
Hisham Muhammad committed
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85

void Platform_getLoadAverage(double* one, double* five, double* fifteen) {
   struct loadavg loadAverage;
   int mib[2] = { CTL_VM, VM_LOADAVG };
   size_t size = sizeof(loadAverage);
   
   int err = sysctl(mib, 2, &loadAverage, &size, NULL, 0);
   if (err) {
      *one = 0;
      *five = 0;
      *fifteen = 0;
      return;
   }
   *one     = (double) loadAverage.ldavg[0] / loadAverage.fscale;
   *five    = (double) loadAverage.ldavg[1] / loadAverage.fscale;
   *fifteen = (double) loadAverage.ldavg[2] / loadAverage.fscale;
}
Hisham Muhammad's avatar
Hisham Muhammad committed
86
87
88
89
90
91
92
93
94
95

int Platform_getMaxPid() {
   int maxPid;
   size_t size = sizeof(maxPid);
   int err = sysctlbyname("kern.pid_max", &maxPid, &size, NULL, 0);
   if (err) {
      return 99999;
   }
   return maxPid;
}