1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
|
/*
* This file defines the interface between top and the machine-dependent
* module. It is NOT machine dependent and should not need to be changed
* for any specific machine.
*
* Copyright (c) 2007-2019, Mark Wong
*/
#ifndef _MACHINE_H_
#define _MACHINE_H_
#include <time.h>
#include <sys/types.h>
#include "pg.h"
#include "pg_config_manual.h"
/*
#ifdef CLK_TCK
# define HZ CLK_TCK
# else
# define HZ 60
# endif
*/
#ifndef HZ
#define HZ sysconf(_SC_CLK_TCK)
#endif
/* Display modes. */
enum DisplayMode
{
MODE_PROCESSES,
MODE_IO_STATS,
MODE_REPLICATION,
MODE_TYPES /* number of modes */
};
/* Maximum number of columns allowed for display */
#define MAX_COLS 255
/*
* The entire display is based on these next numbers being defined as is.
*/
#define NUM_AVERAGES 3
#define NPROCSTATES 7
/*
* The statics struct is filled in by machine_init. Fields marked as
* "optional" are not filled in by every module.
*/
struct statics
{
char **procstate_names;
char **cpustate_names;
char **memory_names;
char **swap_names; /* optional */
char **order_names; /* optional */
char **color_names; /* optional */
time_t boottime; /* optional */
int ncpus;
struct
{
unsigned int fullcmds:1;
unsigned int idle:1;
unsigned int warmup:1;
} flags;
};
/*
* the system_info struct is filled in by a machine dependent routine.
*/
#ifdef p_active /* uw7 define macro p_active */
#define P_ACTIVE p_pactive
#else
#define P_ACTIVE p_active
#endif
struct system_info
{
int last_pid;
double load_avg[NUM_AVERAGES];
int p_total;
int P_ACTIVE; /* number of procs considered "active" */
int *procstates;
int64_t *cpustates;
long *memory;
long *swap;
};
/* cpu_states is an array of percentages * 10. For example,
the (integer) value 105 is 10.5% (or .105).
*/
/*
* Database activity information
*/
struct db_info {
int numDb;
int64_t numXact;
int64_t numRollback;
int64_t numBlockRead;
int64_t numBlockHit;
int64_t numTupleFetched;
int64_t numTupleAltered;
int64_t numConflict;
};
/*
* Info on reads/writes happening on disk.
* On Linux, this can be obtained from /proc/diskstats.
*/
struct io_info {
int64_t reads;
int64_t readsectors;
int64_t writes;
int64_t writesectors;
};
/*
* the process_select struct tells get_process_info what processes we
* are interested in seeing
*/
struct process_select
{
int idle; /* show idle processes */
int fullcmd; /* show full command */
char *command; /* only this command (unless == NULL) */
char usename[NAMEDATALEN + 1]; /* only this postgres usename */
};
/* routines defined by the machine dependent module */
int machine_init(struct statics *);
void get_system_info(struct system_info *);
caddr_t get_process_info(struct system_info *, struct process_select *, int,
struct pg_conninfo_ctx *, int);
#ifdef __linux__
caddr_t get_process_info(struct system_info *, struct process_select *, int,
struct pg_conninfo_ctx *, int);
#else
caddr_t get_process_info(struct system_info *, struct process_select *, int,
char *);
#endif /* __linux__ */
void get_database_info(struct db_info *, struct pg_conninfo_ctx *);
void get_io_info(struct io_info *);
char *format_header(char *);
#if defined(__linux__) || defined (__FreeBSD__)
char *format_next_io(caddr_t);
#endif /* defined(__linux__) || defined (__FreeBSD__) */
char *format_next_process(caddr_t);
char *format_next_replication(caddr_t);
uid_t proc_owner(pid_t);
void update_state(int *pgstate, char *state);
void update_str(char **, char *);
extern int mode_stats;
extern char *backendstatenames[];
extern char *procstatenames[];
extern char fmt_header_io[];
extern char fmt_header_replication[];
#endif /* _MACHINE_H_ */
|