blob: f98a5ececb8cb15decb1948cb8332388e81800c3 [file] [log] [blame]
William Lallemand9ed62032016-11-21 17:49:11 +01001/*
2 * include/proto/stats.h
3 * This file contains definitions of some primitives to dedicated to
4 * statistics output.
5 *
6 * Copyright (C) 2000-2011 Willy Tarreau - w@1wt.eu
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation, version 2.1
11 * exclusively.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
17 *
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with this library; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21 */
22
23#ifndef _PROTO_STATS_H
24#define _PROTO_STATS_H
25
Willy Tarreau48fbcae2020-06-03 18:09:46 +020026#include <haproxy/tools.h>
Willy Tarreau4c7e4b72020-05-27 12:58:42 +020027#include <haproxy/api.h>
William Lallemand9ed62032016-11-21 17:49:11 +010028#include <types/applet.h>
29#include <types/stream_interface.h>
Christopher Faulet702226c2018-10-03 16:11:20 +020030#include <types/stats.h>
William Lallemand9ed62032016-11-21 17:49:11 +010031
32
33static inline enum field_format field_format(const struct field *f, int e)
34{
35 return f[e].type & FF_MASK;
36}
37
38static inline enum field_origin field_origin(const struct field *f, int e)
39{
40 return f[e].type & FO_MASK;
41}
42
43static inline enum field_scope field_scope(const struct field *f, int e)
44{
45 return f[e].type & FS_MASK;
46}
47
48static inline enum field_nature field_nature(const struct field *f, int e)
49{
50 return f[e].type & FN_MASK;
51}
52
53static inline const char *field_str(const struct field *f, int e)
54{
Willy Tarreauddc3e9e2016-11-26 15:55:59 +010055 return (field_format(f, e) == FF_STR && f[e].u.str) ? f[e].u.str : "";
William Lallemand9ed62032016-11-21 17:49:11 +010056}
57
58static inline struct field mkf_s32(uint32_t type, int32_t value)
59{
60 struct field f = { .type = FF_S32 | type, .u.s32 = value };
61 return f;
62}
63
64static inline struct field mkf_u32(uint32_t type, uint32_t value)
65{
66 struct field f = { .type = FF_U32 | type, .u.u32 = value };
67 return f;
68}
69
70static inline struct field mkf_s64(uint32_t type, int64_t value)
71{
72 struct field f = { .type = FF_S64 | type, .u.s64 = value };
73 return f;
74}
75
76static inline struct field mkf_u64(uint32_t type, uint64_t value)
77{
78 struct field f = { .type = FF_U64 | type, .u.u64 = value };
79 return f;
80}
81
82static inline struct field mkf_str(uint32_t type, const char *value)
83{
84 struct field f = { .type = FF_STR | type, .u.str = value };
85 return f;
86}
87
Christopher Faulet88a0db22019-09-24 16:35:10 +020088static inline struct field mkf_flt(uint32_t type, double value)
89{
90 struct field f = { .type = FF_FLT | type, .u.flt = value };
91 return f;
92}
93
Christopher Faulet2b9b6782019-02-27 16:42:58 +010094extern const char *stat_status_codes[];
95
Willy Tarreaueaa55372019-10-09 07:39:11 +020096/* These two structs contains all field names and descriptions according to
97 * the the number of entries in "enum stat_field" and "enum info_field"
William Lallemand9ed62032016-11-21 17:49:11 +010098 */
Willy Tarreaueaa55372019-10-09 07:39:11 +020099extern const struct name_desc stat_fields[];
100extern const struct name_desc info_fields[];
William Lallemand9ed62032016-11-21 17:49:11 +0100101
102int stats_fill_info(struct field *info, int len);
103int stats_fill_fe_stats(struct proxy *px, struct field *stats, int len);
104int stats_fill_li_stats(struct proxy *px, struct listener *l, int flags,
105 struct field *stats, int len);
106int stats_fill_sv_stats(struct proxy *px, struct server *sv, int flags,
107 struct field *stats, int len);
108int stats_fill_be_stats(struct proxy *px, int flags, struct field *stats, int len);
109
110extern struct applet http_stats_applet;
111
112void stats_io_handler(struct stream_interface *si);
Willy Tarreau83061a82018-07-13 11:56:34 +0200113int stats_emit_raw_data_field(struct buffer *out, const struct field *f);
114int stats_emit_typed_data_field(struct buffer *out, const struct field *f);
115int stats_emit_field_tags(struct buffer *out, const struct field *f,
116 char delim);
William Lallemand9ed62032016-11-21 17:49:11 +0100117
118#endif /* _PROTO_STATS_H */
119
120/*
121 * Local variables:
122 * c-indent-level: 8
123 * c-basic-offset: 8
124 * End:
125 */