summaryrefslogtreecommitdiffstats
path: root/runtime/dynstats.h
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 16:28:20 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 16:28:20 +0000
commitdcc721a95bef6f0d8e6d8775b8efe33e5aecd562 (patch)
tree66a2774cd0ee294d019efd71d2544c70f42b2842 /runtime/dynstats.h
parentInitial commit. (diff)
downloadrsyslog-dcc721a95bef6f0d8e6d8775b8efe33e5aecd562.tar.xz
rsyslog-dcc721a95bef6f0d8e6d8775b8efe33e5aecd562.zip
Adding upstream version 8.2402.0.upstream/8.2402.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'runtime/dynstats.h')
-rw-r--r--runtime/dynstats.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/runtime/dynstats.h b/runtime/dynstats.h
new file mode 100644
index 0000000..a8986f4
--- /dev/null
+++ b/runtime/dynstats.h
@@ -0,0 +1,83 @@
+/*
+ * This file is part of the rsyslog runtime library.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * -or-
+ * see COPYING.ASL20 in the source distribution
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#ifndef INCLUDED_DYNSTATS_H
+#define INCLUDED_DYNSTATS_H
+
+#include "hashtable.h"
+
+typedef struct hashtable htable;
+
+struct dynstats_ctr_s {
+ STATSCOUNTER_DEF(ctr, mutCtr);
+ ctr_t *pCtr;
+ uchar *metric;
+ /* linked list ptr */
+ struct dynstats_ctr_s *next;
+ struct dynstats_ctr_s *prev;
+};
+
+struct dynstats_bucket_s {
+ htable *table;
+ uchar *name;
+ pthread_rwlock_t lock;
+ statsobj_t *stats;
+ STATSCOUNTER_DEF(ctrOpsOverflow, mutCtrOpsOverflow);
+ ctr_t *pOpsOverflowCtr;
+ STATSCOUNTER_DEF(ctrNewMetricAdd, mutCtrNewMetricAdd);
+ ctr_t *pNewMetricAddCtr;
+ STATSCOUNTER_DEF(ctrNoMetric, mutCtrNoMetric);
+ ctr_t *pNoMetricCtr;
+ STATSCOUNTER_DEF(ctrMetricsPurged, mutCtrMetricsPurged);
+ ctr_t *pMetricsPurgedCtr;
+ STATSCOUNTER_DEF(ctrOpsIgnored, mutCtrOpsIgnored);
+ ctr_t *pOpsIgnoredCtr;
+ STATSCOUNTER_DEF(ctrPurgeTriggered, mutCtrPurgeTriggered);
+ ctr_t *pPurgeTriggeredCtr;
+ struct dynstats_bucket_s *next; /* linked list ptr */
+ struct dynstats_ctr_s *ctrs;
+ /*survivor objects are used to keep counter values around for upto unused-ttl duration,
+ so in case it is accessed within (ttl - 2 * ttl) time-period we can re-store the
+ accumulator value from this */
+ struct dynstats_ctr_s *survivor_ctrs;
+ htable *survivor_table;
+
+ uint32_t maxCardinality;
+ uint32_t metricCount;
+ pthread_mutex_t mutMetricCount;
+ uint32_t unusedMetricLife;
+ uint32_t lastResetTs;
+ struct timespec metricCleanupTimeout;
+ uint8_t resettable;
+};
+
+struct dynstats_buckets_s {
+ struct dynstats_bucket_s *list;
+ statsobj_t *global_stats;
+ pthread_rwlock_t lock;
+ uint8_t initialized;
+};
+
+rsRetVal dynstats_initCnf(dynstats_buckets_t *b);
+rsRetVal dynstats_processCnf(struct cnfobj *o);
+dynstats_bucket_t * dynstats_findBucket(const uchar* name);
+rsRetVal dynstats_inc(dynstats_bucket_t *bucket, uchar* metric);
+void dynstats_destroyAllBuckets(void);
+void dynstats_resetExpired(void);
+rsRetVal dynstatsClassInit(void);
+
+#endif /* #ifndef INCLUDED_DYNSTATS_H */