-module(performance_monitor).
|
|
-behaviour(gen_server).
|
|
|
|
-export([start_link/0, init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).
|
|
-export([start_monitoring/1, stop_monitoring/1, get_metrics/1, generate_report/1]).
|
|
|
|
-record(state, {
|
|
monitors = #{}, % 监控对象集合
|
|
metrics = #{}, % 性能指标数据
|
|
alerts = [], % 告警信息
|
|
start_time = undefined
|
|
}).
|
|
|
|
-record(monitor_data, {
|
|
type, % 监控类型
|
|
metrics = [], % 指标列表
|
|
threshold = #{}, % 阈值设置
|
|
callback % 回调函数
|
|
}).
|
|
|
|
%% API
|
|
start_link() ->
|
|
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
|
|
|
|
start_monitoring(Target) ->
|
|
gen_server:call(?MODULE, {start_monitoring, Target}).
|
|
|
|
stop_monitoring(Target) ->
|
|
gen_server:call(?MODULE, {stop_monitoring, Target}).
|
|
|
|
get_metrics(Target) ->
|
|
gen_server:call(?MODULE, {get_metrics, Target}).
|
|
|
|
generate_report(Target) ->
|
|
gen_server:call(?MODULE, {generate_report, Target}).
|
|
|
|
%% 内部函数
|
|
|
|
collect_metrics(Target) ->
|
|
% 收集各种性能指标
|
|
#{
|
|
cpu_usage => get_cpu_usage(Target),
|
|
memory_usage => get_memory_usage(Target),
|
|
response_time => get_response_time(Target),
|
|
throughput => get_throughput(Target)
|
|
}.
|
|
|
|
analyze_performance(Metrics) ->
|
|
% 分析性能数据
|
|
#{
|
|
avg_response_time => calculate_average(maps:get(response_time, Metrics)),
|
|
peak_memory => get_peak_value(maps:get(memory_usage, Metrics)),
|
|
bottlenecks => identify_bottlenecks(Metrics)
|
|
}.
|
|
|
|
generate_alerts(Metrics, Thresholds) ->
|
|
% 生成性能告警
|
|
lists:filtermap(
|
|
fun({Metric, Value}) ->
|
|
case check_threshold(Metric, Value, Thresholds) of
|
|
{true, Alert} -> {true, Alert};
|
|
false -> false
|
|
end
|
|
end,
|
|
maps:to_list(Metrics)
|
|
).
|
|
|
|
create_report(Target, Metrics) ->
|
|
% 生成性能报告
|
|
#{
|
|
target => Target,
|
|
timestamp => os:timestamp(),
|
|
metrics => Metrics,
|
|
analysis => analyze_performance(Metrics),
|
|
recommendations => generate_recommendations(Metrics)
|
|
}.
|