mirror of
https://github.com/openappsec/openappsec.git
synced 2025-06-28 16:41:02 +03:00
147 lines
4.8 KiB
C
147 lines
4.8 KiB
C
// 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__
|