| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- #include "c_helpers.h"
- GETFUNC(cpu)
- GETFUNC(disk)
- GETFUNC(diskadapter)
- GETFUNC(diskpath)
- GETFUNC(fcstat)
- GETFUNC(logicalvolume)
- GETFUNC(memory_page)
- GETFUNC(netadapter)
- GETFUNC(netbuffer)
- GETFUNC(netinterface)
- GETFUNC(pagingspace)
- GETFUNC(process)
- GETFUNC(thread)
- GETFUNC(volumegroup)
- double get_partition_mhz(perfstat_partition_config_t pinfo) {
- return pinfo.processorMHz;
- }
- char *get_ps_hostname(perfstat_pagingspace_t *ps) {
- return ps->u.nfs_paging.hostname;
- }
- char *get_ps_filename(perfstat_pagingspace_t *ps) {
- return ps->u.nfs_paging.filename;
- }
- char *get_ps_vgname(perfstat_pagingspace_t *ps) {
- return ps->u.lv_paging.vgname;
- }
- time_t boottime()
- {
- register struct utmpx *utmp;
- setutxent();
- while ( (utmp = getutxent()) != NULL ) {
- if (utmp->ut_type == BOOT_TIME) {
- return utmp->ut_tv.tv_sec;
- }
- }
- endutxent();
- return -1;
- }
- struct fsinfo *get_filesystem_stat(struct fsinfo *fs_all, int n) {
- if (!fs_all) return NULL;
- return &(fs_all[n]);
- }
- int get_mounts(struct vmount **vmountpp) {
- int size;
- struct vmount *vm;
- int nmounts;
- size = BUFSIZ;
- while (1) {
- if ((vm = (struct vmount *)malloc((size_t)size)) == NULL) {
- perror("malloc failed");
- exit(-1);
- }
- if ((nmounts = mntctl(MCTL_QUERY, size, (caddr_t)vm)) > 0) {
- *vmountpp = vm;
- return nmounts;
- } else if (nmounts == 0) {
- size = *(int *)vm;
- free((void *)vm);
- } else {
- free((void *)vm);
- return -1;
- }
- }
- }
- void fill_fsinfo(struct statfs statbuf, struct fsinfo *fs) {
- fsblkcnt_t freeblks, totblks, usedblks;
- fsblkcnt_t tinodes, ninodes, ifree;
- uint cfactor;
- if (statbuf.f_blocks == -1) {
- fs->totalblks = 0;
- fs->freeblks = 0;
- fs->totalinodes = 0;
- fs->freeinodes = 0;
- return;
- }
- cfactor = statbuf.f_bsize / 512;
- fs->freeblks = statbuf.f_bavail * cfactor;
- fs->totalblks = statbuf.f_blocks * cfactor;
- fs->freeinodes = statbuf.f_ffree;
- fs->totalinodes = statbuf.f_files;
- if (fs->freeblks < 0)
- fs->freeblks = 0;
- }
- int getfsinfo(char *fsname, char *devname, char *host, char *options, int flags, int fstype, struct fsinfo *fs) {
- struct statfs statbuf;
- int devname_size = strlen(devname);
- int fsname_size = strlen(fsname);
- char buf[BUFSIZ];
- char *p;
- if (fs == NULL) {
- return 1;
- }
- for (p = strtok(options, ","); p != NULL; p = strtok(NULL, ","))
- if (strcmp(p, "ignore") == 0)
- return 0;
- if (*host != 0 && strcmp(host, "-") != 0) {
- sprintf(buf, "%s:%s", host, devname);
- devname = buf;
- }
- fs->devname = (char *)calloc(devname_size+1, 1);
- fs->fsname = (char *)calloc(fsname_size+1, 1);
- strncpy(fs->devname, devname, devname_size);
- strncpy(fs->fsname, fsname, fsname_size);
- fs->flags = flags;
- fs->fstype = fstype;
- if (statfs(fsname,&statbuf) < 0) {
- return 1;
- }
- fill_fsinfo(statbuf, fs);
- return 0;
- }
- struct fsinfo *get_all_fs(int *rc) {
- struct vmount *mnt;
- struct fsinfo *fs_all;
- int nmounts;
- *rc = -1;
- if ((nmounts = get_mounts(&mnt)) <= 0) {
- perror("Can't get mount table info");
- return NULL;
- }
- fs_all = (struct fsinfo *)calloc(sizeof(struct fsinfo), nmounts);
- while ((*rc)++, nmounts--) {
- getfsinfo(vmt2dataptr(mnt, VMT_STUB),
- vmt2dataptr(mnt, VMT_OBJECT),
- vmt2dataptr(mnt, VMT_HOST),
- vmt2dataptr(mnt, VMT_ARGS),
- mnt->vmt_flags,
- mnt->vmt_gfstype,
- &fs_all[*rc]);
- mnt = (struct vmount *)((char *)mnt + mnt->vmt_length);
- }
- return fs_all;
- }
|