source: vendor/3.6.0/examples/perfcounter/perf.h

Last change on this file was 740, checked in by Silvan Scherrer, 13 years ago

Samba Server: update vendor to 3.6.0

File size: 5.2 KB
Line 
1/*
2 * Unix SMB/CIFS implementation.
3 * Performance Counter Daemon
4 *
5 * Copyright (C) Marcin Krzysztof Porwit 2005
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, see <http://www.gnu.org/licenses/>.
19 */
20
21#ifndef __PERF_H__
22#define __PERF_H__
23
24#define _PUBLIC_
25
26#ifdef HAVE_STDBOOL_H
27#include <stdbool.h>
28#endif
29
30#if !defined(HAVE_BOOL)
31#ifdef HAVE__Bool
32#define bool _Bool
33#else
34typedef int bool;
35#endif
36#endif
37
38
39#include <stdlib.h>
40#include <time.h>
41#include <math.h>
42#include <stdio.h>
43#include <fcntl.h>
44#include <unistd.h>
45#include <string.h>
46#include <fcntl.h>
47#include <signal.h>
48#include <stdarg.h>
49#include <sys/mman.h>
50#include <sys/stat.h>
51#include <sys/time.h>
52#include <sys/wait.h>
53#include <limits.h>
54#include <tdb.h>
55#include "librpc/gen_ndr/perfcount.h"
56#include <sys/statfs.h>
57#include <sys/times.h>
58#include <sys/sysinfo.h>
59
60#define NUM_COUNTERS 10
61
62#define NAME_LEN 256
63#define HELP_LEN 1024
64
65#define PERF_OBJECT 0
66#define PERF_INSTANCE 1
67#define PERF_COUNTER 2
68
69#define FALSE 0
70#define TRUE !FALSE
71
72#define PROC_BUF 256
73#define LARGE_BUF 16384
74
75typedef struct perf_counter
76{
77 int index;
78 char name[NAME_LEN];
79 char help[HELP_LEN];
80 char relationships[NAME_LEN];
81 unsigned int counter_type;
82 int record_type;
83} PerfCounter;
84
85typedef struct mem_data
86{
87 unsigned int availPhysKb;
88 unsigned int availSwapKb;
89 unsigned int totalPhysKb;
90 unsigned int totalSwapKb;
91} MemData;
92
93typedef struct mem_info
94{
95 PerfCounter memObjDesc;
96 PerfCounter availPhysKb;
97 PerfCounter availSwapKb;
98 PerfCounter totalPhysKb;
99 PerfCounter totalSwapKb;
100 MemData *data;
101} MemInfo;
102
103typedef struct cpu_data
104{
105 unsigned long long user;
106 unsigned long long nice;
107 unsigned long long system;
108 unsigned long long idle;
109} CPUData;
110
111typedef struct cpu_info
112{
113 unsigned int numCPUs;
114 PerfCounter cpuObjDesc;
115 PerfCounter userCPU;
116 PerfCounter niceCPU;
117 PerfCounter systemCPU;
118 PerfCounter idleCPU;
119 CPUData *data;
120} CPUInfo;
121
122typedef struct disk_meta_data
123{
124 char name[NAME_LEN];
125 char mountpoint[NAME_LEN];
126} DiskMetaData;
127
128typedef struct disk_data
129{
130 unsigned long long freeMegs;
131 unsigned int writesPerSec;
132 unsigned int readsPerSec;
133} DiskData;
134
135typedef struct disk_info
136{
137 unsigned int numDisks;
138 DiskMetaData *mdata;
139 PerfCounter diskObjDesc;
140 PerfCounter freeMegs;
141 PerfCounter writesPerSec;
142 PerfCounter readsPerSec;
143 DiskData *data;
144} DiskInfo;
145
146typedef struct process_data
147{
148 unsigned int runningProcessCount;
149} ProcessData;
150
151typedef struct process_info
152{
153 PerfCounter processObjDesc;
154 PerfCounter runningProcessCount;
155 ProcessData *data;
156} ProcessInfo;
157
158typedef struct perf_data_block
159{
160 unsigned int counter_id;
161 unsigned int num_counters;
162 unsigned int NumObjectTypes;
163 unsigned long long PerfTime;
164 unsigned long long PerfFreq;
165 unsigned long long PerfTime100nSec;
166 MemInfo memInfo;
167 CPUInfo cpuInfo;
168 ProcessInfo processInfo;
169 DiskInfo diskInfo;
170} PERF_DATA_BLOCK;
171
172typedef struct runtime_settings
173{
174 /* Runtime flags */
175 int dflag;
176 /* DB path names */
177 char dbDir[PATH_MAX];
178 char nameFile[PATH_MAX];
179 char counterFile[PATH_MAX];
180 /* TDB context */
181 TDB_CONTEXT *cnames;
182 TDB_CONTEXT *cdata;
183} RuntimeSettings;
184
185/* perf_writer_ng_util.c function prototypes */
186void fatal(char *msg);
187void add_key(TDB_CONTEXT *db, char *keystring, char *datastring, int flags);
188void add_key_raw(TDB_CONTEXT *db, char *keystring, void *datastring, size_t datasize, int flags);
189void make_key(char *buf, int buflen, int key_part1, char *key_part2);
190void parse_flags(RuntimeSettings *rt, int argc, char **argv);
191void setup_file_paths(RuntimeSettings *rt);
192void daemonize(RuntimeSettings *rt);
193
194/* perf_writer_ng_mem.c function prototypes */
195void get_meminfo(PERF_DATA_BLOCK *data);
196void init_memdata_desc(PERF_DATA_BLOCK *data);
197void init_memdata(PERF_DATA_BLOCK *data);
198void output_mem_desc(PERF_DATA_BLOCK *data, RuntimeSettings rt);
199void output_meminfo(PERF_DATA_BLOCK *data, RuntimeSettings rt, int tdb_flags);
200void init_perf_counter(PerfCounter *counter, PerfCounter *parent, unsigned int index, char *name, char *help, int counter_type, int record_type);
201
202/* perf_writer_ng_cpu.c function prototypes */
203unsigned long long get_cpufreq();
204void init_cpudata_desc(PERF_DATA_BLOCK *data);
205void get_cpuinfo(PERF_DATA_BLOCK *data);
206void init_cpu_data(PERF_DATA_BLOCK *data);
207void output_cpu_desc(PERF_DATA_BLOCK *data, RuntimeSettings rt);
208void output_cpuinfo(PERF_DATA_BLOCK *data, RuntimeSettings rt, int tdb_flags);
209
210#endif /* __PERF_H__ */
Note: See TracBrowser for help on using the repository browser.