Comparison

core/statsmanager.lua @ 7524:b6f32bb3b584

statsmanager: If provider doesn't offer a get_stats method, still fire the stats-update event if stats_interval is specified (however stats-updated will not fire)
author Matthew Wild <mwild1@gmail.com>
date Wed, 27 Jul 2016 15:01:28 +0100
parent 7522:ebf2e77ac8a7
child 7533:4ef37ac69562
comparison
equal deleted inserted replaced
7522:ebf2e77ac8a7 7524:b6f32bb3b584
54 return f(name); 54 return f(name);
55 end 55 end
56 end 56 end
57 57
58 if stats_interval then 58 if stats_interval then
59 if stats.get_stats then 59 log("debug", "Statistics collection is enabled every %d seconds", stats_interval);
60 log("debug", "Statistics collection is enabled every %d seconds", stats_interval);
61 60
62 local mark_collection_start = measure("times", "stats.collection"); 61 local mark_collection_start = measure("times", "stats.collection");
63 local mark_processing_start = measure("times", "stats.processing"); 62 local mark_processing_start = measure("times", "stats.processing");
64 63
65 function collect() 64 function collect()
66 local mark_collection_done = mark_collection_start(); 65 local mark_collection_done = mark_collection_start();
67 fire_event("stats-update"); 66 fire_event("stats-update");
67 mark_collection_done();
68
69 if stats.get_stats then
68 changed_stats, stats_extra = {}, {}; 70 changed_stats, stats_extra = {}, {};
69 for stat_name, getter in pairs(stats.get_stats()) do 71 for stat_name, getter in pairs(stats.get_stats()) do
70 local type, value, extra = getter(); 72 local type, value, extra = getter();
71 local old_value = latest_stats[stat_name]; 73 local old_value = latest_stats[stat_name];
72 latest_stats[stat_name] = value; 74 latest_stats[stat_name] = value;
75 end 77 end
76 if extra then 78 if extra then
77 stats_extra[stat_name] = extra; 79 stats_extra[stat_name] = extra;
78 end 80 end
79 end 81 end
80 mark_collection_done();
81 local mark_processing_done = mark_processing_start(); 82 local mark_processing_done = mark_processing_start();
82 fire_event("stats-updated", { stats = latest_stats, changed_stats = changed_stats, stats_extra = stats_extra }); 83 fire_event("stats-updated", { stats = latest_stats, changed_stats = changed_stats, stats_extra = stats_extra });
83 mark_processing_done(); 84 mark_processing_done();
84 return stats_interval;
85 end 85 end
86 timer.add_task(stats_interval, collect); 86 return stats_interval;
87 prosody.events.add_handler("server-started", function () collect() end, -1);
88 else
89 log("error", "statistics_interval specified, but the selected statistics_provider (%s) does not support statistics collection", stats_provider_config or "internal");
90 end 87 end
88 timer.add_task(stats_interval, collect);
89 prosody.events.add_handler("server-started", function () collect() end, -1);
91 end 90 end
92 91
93 if not stats_interval and stats_provider == "util.statistics" then 92 if not stats_interval and stats_provider == "util.statistics" then
94 log("debug", "Statistics collection is disabled"); 93 log("debug", "Statistics collection is disabled");
95 -- nop 94 -- nop