mirror of
https://github.com/openappsec/openappsec.git
synced 2025-10-01 20:17:43 +03:00
First release of open-appsec source code
This commit is contained in:
146
components/utils/pm/kiss_pm_stats.h
Normal file
146
components/utils/pm/kiss_pm_stats.h
Normal file
@@ -0,0 +1,146 @@
|
||||
// Copyright (C) 2022 Check Point Software Technologies Ltd. All rights reserved.
|
||||
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// 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 __kiss_pm_stats_h__
|
||||
#define __kiss_pm_stats_h__
|
||||
|
||||
#include "pm_adaptor.h"
|
||||
|
||||
// Common statistics
|
||||
|
||||
// Common run time statistics
|
||||
struct kiss_pm_stats_dynamic_s {
|
||||
u_int num_of_buffs; // Number of buffers we ran this dfa on
|
||||
u_int num_of_matches; // how many matches there were in this dfa
|
||||
u_int max_matches_on_buf; // Maximal number of matches per one buf
|
||||
|
||||
struct { // Buffer length statistics
|
||||
u_int max; // Maximum buffer length
|
||||
u_int total; // Total length (for average calculation)
|
||||
u_int sample_num; // Number of buffers, whose lengths make up total.
|
||||
} buflen;
|
||||
|
||||
struct { // Execution time statistics - not collected by default
|
||||
u_int total_exec_time; // PM Execution time (not including user callbacks)
|
||||
u_int max_exec_time; // Maximal PM execution time
|
||||
u_int user_cb_exec_time; // User callback execution time
|
||||
u_int user_cb_max_time; // Maximal user callback execution time
|
||||
u_int sample_num; // Number of execution time samples
|
||||
} runtime;
|
||||
|
||||
u_int num_of_stage1_matches; // Tier1 LSS matches, before filtering by mask
|
||||
u_int num_of_stage22_matches; // Tier1 matches after ^
|
||||
u_int num_of_stage23_matches; // Tier1 matches after $
|
||||
};
|
||||
|
||||
// Common build time statistics
|
||||
struct kiss_pm_stats_static_s {
|
||||
u_int memory_bytes; // How many bytes does this tier consume
|
||||
u_int compilation_time; // Compilation time of this tier in micro-seconds
|
||||
};
|
||||
|
||||
struct CP_CACHELINE_ALIGNED kiss_pm_stats_dynamic_aligned_s {
|
||||
struct kiss_pm_stats_dynamic_s stats;
|
||||
};
|
||||
|
||||
struct kiss_pm_stats_common_s {
|
||||
// Run time statistics, per-CPU, dynamically allocated
|
||||
struct kiss_pm_stats_dynamic_aligned_s* exec;
|
||||
// Size of the exec array
|
||||
u_int exec_num_cpus;
|
||||
// Build time statistics
|
||||
struct kiss_pm_stats_static_s compile;
|
||||
};
|
||||
|
||||
typedef struct kiss_pm_stats_common_s *kiss_pm_stats_common;
|
||||
|
||||
enum kiss_pm_stats_update_compile_type {
|
||||
UPDATE_COMPILE_STATS_MEM,
|
||||
UPDATE_COMPILE_STATS_TIME,
|
||||
UPDATE_COMPILE_STATS_BOTH
|
||||
};
|
||||
|
||||
// In which format the statistics should be printed
|
||||
enum kiss_pm_stats_format {
|
||||
KISS_PM_TEXT_FORMAT_STATS = 0, // Textual, for viewing with text editor
|
||||
KISS_PM_CSV_FORMAT_STATS // CSV, for opening with Excel
|
||||
};
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
kiss_ret_val kiss_pm_stats_common_init(kiss_pm_stats_common new_stats);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_free(kiss_pm_stats_common stats);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_update_compile(
|
||||
kiss_pm_stats_common stats,
|
||||
u_int bytes,
|
||||
u_int compilation_time,
|
||||
enum kiss_pm_stats_update_compile_type type);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_update_exec(kiss_pm_stats_common stats, u_int buf_size, u_int num_of_matches);
|
||||
|
||||
|
||||
// @brief
|
||||
// Updating the execution time of an execution of a buffer in tier2.
|
||||
//
|
||||
// @param stats - [in] The tier2 common stats.
|
||||
// @param exec_time - [in] The execution time.
|
||||
// @param buf_len - [in] the length of the last buffer that was executed
|
||||
//
|
||||
// @return Void
|
||||
//
|
||||
// @note
|
||||
// in case one of the stats vars will warp-around, the aggregated vars will hold only the last exec stats.
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_update_exec_time(kiss_pm_stats_common stats, u_int exec_time, u_int user_cb_time);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_reset_exec(kiss_pm_stats_common stats);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
void kiss_pm_stats_common_print(
|
||||
kiss_pm_stats_common stats,
|
||||
enum kiss_pm_stats_type type,
|
||||
enum kiss_pm_stats_format format,
|
||||
BOOL print_headline
|
||||
);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
kiss_ret_val kiss_pm_stats_common_get(
|
||||
struct kiss_pm_stats_static_s *dst_compile,
|
||||
struct kiss_pm_stats_dynamic_s *dst_exec,
|
||||
const struct kiss_pm_stats_common_s *src
|
||||
);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
kiss_ret_val kiss_pm_stats_common_copy(kiss_pm_stats_common dst, const struct kiss_pm_stats_common_s *src);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
u_int kiss_pm_stats_common_get_serialize_size(void);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
kiss_ret_val kiss_pm_stats_common_serialize(const struct kiss_pm_stats_common_s *stats, u_char **buf, u_int *size);
|
||||
|
||||
KISS_APPS_CPAPI
|
||||
kiss_ret_val kiss_pm_stats_common_deserialize(
|
||||
kiss_pm_stats_common stats,
|
||||
u_char **buf,
|
||||
u_int *size,
|
||||
kiss_vbuf vbuf,
|
||||
kiss_vbuf_iter *vbuf_iter
|
||||
);
|
||||
|
||||
#endif // __kiss_pm_stats_h__
|
Reference in New Issue
Block a user