1/*
2 * monitor.h
3 *
4 * Copyright (C) 2012-2014 Aerospike, Inc.
5 *
6 * Portions may be licensed to Aerospike, Inc. under one or more contributor
7 * license agreements.
8 *
9 * This program is free software: you can redistribute it and/or modify it under
10 * the terms of the GNU Affero General Public License as published by the Free
11 * Software Foundation, either version 3 of the License, or (at your option) any
12 * later version.
13 *
14 * This program is distributed in the hope that it will be useful, but WITHOUT
15 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
16 * FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
17 * details.
18 *
19 * You should have received a copy of the GNU Affero General Public License
20 * along with this program. If not, see http://www.gnu.org/licenses/
21 */
22
23/*
24 * Long Running Job Monitoring interface
25 *
26 * This file implements the generic interface for the long running jobs
27 * in Aerospike like query / scan / batch etc. The idea is to able to see
28 * what is going on in the system.
29 *
30 * Each module which needs to show up in the monitoring needs to register
31 * and implement the interfaces.
32 */
33
34#pragma once
35
36#include <stdint.h>
37
38#include "dynbuf.h"
39
40#include "base/datamodel.h"
41
42
43#define AS_MON_OK 0
44#define AS_MON_ERR -1
45#define AS_MON_EXIST -2
46#define TRID_LIST_SIZE 1000
47
48typedef enum {
49 QUERY_MOD = 0,
50 SCAN_MOD = 1,
51 SBLD_MOD = 2
52} as_mon_module_slot;
53
54extern const char * AS_MON_MODULES[];
55
56// Stat for currently running job
57typedef struct as_mon_jobstat_s {
58 uint64_t trid;
59 char job_type[32];
60 char ns[AS_ID_NAMESPACE_SZ];
61 char set[AS_SET_NAME_MAX_SIZE];
62 uint32_t priority;
63 uint32_t rps;
64 uint32_t active_threads;
65 char status[64];
66 float progress_pct;
67 uint64_t run_time;
68 uint64_t time_since_done;
69 uint64_t recs_throttled;
70 uint64_t recs_filtered_meta;
71 uint64_t recs_filtered_bins;
72 uint64_t recs_succeeded;
73 uint64_t recs_failed;
74 uint64_t net_io_bytes;
75 uint32_t socket_timeout;
76 char client[64];
77 char jdata[512];
78} as_mon_jobstat;
79
80typedef struct as_mon_cb_s {
81 as_mon_jobstat *(*get_jobstat) (uint64_t trid);
82 as_mon_jobstat *(*get_jobstat_all) (int * size);
83
84 // Per transaction
85 int (*set_priority) (uint64_t trid, uint32_t priority);
86 int (*kill) (uint64_t trid);
87 int (*suspend) (uint64_t trid);
88
89 // Per Module
90 // Numer of pending transaction of this job type in queue allowed
91 // incoming more than this will be rejected.
92 int (*set_pendingmax) (int);
93
94 // Set the number of transaction that can be inflight at
95 // any point of time.
96 int (*set_maxinflight) (int);
97
98 // Any individual transaction priority has upper bound of max
99 // priority of jobtype
100 int (*set_maxpriority) (int);
101} as_mon_cb;
102
103// Structure to register module with as mon interface.
104typedef struct as_mon_s {
105 char *type;
106 as_mon_cb cb;
107} as_mon;
108
109void as_mon_info_cmd(const char *module, char *cmd, uint64_t trid, uint32_t priority, cf_dyn_buf *db);
110int as_mon_init();
111