Coverage report: 70%

Files Functions Classes

coverage.py v7.9.1, created at 2025-07-23 14:35 +0000

File function statements missing excluded branches partial coverage
src/actuator.py sig_handler 4 0 0 2 0 100%
src/actuator.py wait_before_start 3 0 0 2 0 100%
src/actuator.py start 31 3 0 4 0 91%
src/actuator.py wait_and_term 15 0 0 4 0 100%
src/actuator.py (no function) 11 0 18 0 0 100%
src/controller.py test_client 2 2 0 0 0 0%
src/controller.py cache_proxy_start 3 0 0 0 0 100%
src/controller.py gen_control_msg 3 0 0 0 0 100%
src/controller.py control_server_start 3 0 0 0 0 100%
src/controller.py start 16 0 0 4 0 100%
src/controller.py wait_and_term 6 0 0 4 0 100%
src/controller.py (no function) 17 0 17 0 0 100%
src/healthz.py check_liveness 6 6 0 6 0 0%
src/healthz.py (no function) 6 6 28 0 0 0%
src/unit_cooler/actuator/control.py gen_handle 1 0 0 0 0 100%
src/unit_cooler/actuator/control.py hazard_register 1 0 0 0 0 100%
src/unit_cooler/actuator/control.py hazard_clear 1 0 0 0 0 100%
src/unit_cooler/actuator/control.py hazard_notify 4 0 0 2 0 100%
src/unit_cooler/actuator/control.py hazard_check 4 0 0 2 0 100%
src/unit_cooler/actuator/control.py get_control_message_impl 15 0 0 10 2 92%
src/unit_cooler/actuator/control.py get_control_message 2 0 3 0 0 100%
src/unit_cooler/actuator/control.py execute 17 2 0 8 1 88%
src/unit_cooler/actuator/control.py (no function) 16 0 0 0 0 100%
src/unit_cooler/actuator/monitor.py init 1 0 0 0 0 100%
src/unit_cooler/actuator/monitor.py gen_handle 1 0 0 0 0 100%
src/unit_cooler/actuator/monitor.py send_mist_condition 11 0 0 8 1 95%
src/unit_cooler/actuator/monitor.py get_mist_condition 7 0 0 2 0 100%
src/unit_cooler/actuator/monitor.py hazard_notify 6 0 0 2 0 100%
src/unit_cooler/actuator/monitor.py check_sensing 8 0 0 6 0 100%
src/unit_cooler/actuator/monitor.py check_mist_condition 14 0 0 14 0 100%
src/unit_cooler/actuator/monitor.py check 7 0 0 4 0 100%
src/unit_cooler/actuator/monitor.py (no function) 20 0 0 0 0 100%
src/unit_cooler/actuator/sensor.py init 2 0 0 0 0 100%
src/unit_cooler/actuator/sensor.py stop 5 2 0 0 0 60%
src/unit_cooler/actuator/sensor.py get_power_state 1 1 0 0 0 0%
src/unit_cooler/actuator/sensor.py get_flow 19 2 0 2 0 90%
src/unit_cooler/actuator/sensor.py (no function) 31 2 2 4 1 91%
src/unit_cooler/actuator/valve.py init 9 0 0 0 0 100%
src/unit_cooler/actuator/valve.py clear_stat 5 0 0 0 0 100%
src/unit_cooler/actuator/valve.py get_hist 1 1 0 0 0 0%
src/unit_cooler/actuator/valve.py set_state 24 2 0 12 2 89%
src/unit_cooler/actuator/valve.py get_state 3 0 0 2 0 100%
src/unit_cooler/actuator/valve.py get_status 8 1 0 4 1 83%
src/unit_cooler/actuator/valve.py set_cooling_working 24 0 0 10 0 100%
src/unit_cooler/actuator/valve.py set_cooling_idle 8 0 0 2 0 100%
src/unit_cooler/actuator/valve.py set_cooling_state 3 0 0 2 0 100%
src/unit_cooler/actuator/valve.py (no function) 26 0 19 0 0 100%
src/unit_cooler/actuator/web_server.py create_app 25 2 0 0 0 92%
src/unit_cooler/actuator/web_server.py start 11 3 0 0 0 73%
src/unit_cooler/actuator/web_server.py term 7 0 0 0 0 100%
src/unit_cooler/actuator/web_server.py (no function) 17 0 14 0 0 100%
src/unit_cooler/actuator/webapi/__init__.py (no function) 0 0 0 0 0 100%
src/unit_cooler/actuator/webapi/flow_status.py get_flow 3 0 0 0 0 100%
src/unit_cooler/actuator/webapi/flow_status.py (no function) 8 0 0 0 0 100%
src/unit_cooler/actuator/webapi/valve_status.py get_valve_status 3 0 0 0 0 100%
src/unit_cooler/actuator/webapi/valve_status.py (no function) 9 0 0 0 0 100%
src/unit_cooler/actuator/work_log.py init 2 0 0 0 0 100%
src/unit_cooler/actuator/work_log.py term 1 0 0 0 0 100%
src/unit_cooler/actuator/work_log.py hist_clear 1 0 0 0 0 100%
src/unit_cooler/actuator/work_log.py hist_get 1 0 0 0 0 100%
src/unit_cooler/actuator/work_log.py add 16 2 0 4 0 90%
src/unit_cooler/actuator/work_log.py (no function) 13 0 21 0 0 100%
src/unit_cooler/actuator/worker.py get_worker_id 1 0 0 0 0 100%
src/unit_cooler/actuator/worker.py get_last_control_message 4 0 0 2 0 100%
src/unit_cooler/actuator/worker.py set_last_control_message 1 0 0 0 0 100%
src/unit_cooler/actuator/worker.py get_should_terminate 1 0 0 0 0 100%
src/unit_cooler/actuator/worker.py init_should_terminate 4 0 0 2 0 100%
src/unit_cooler/actuator/worker.py collect_environmental_metrics 26 3 0 12 5 79%
src/unit_cooler/actuator/worker.py queue_put 4 0 0 0 0 100%
src/unit_cooler/actuator/worker.py sleep_until_next_iter 3 0 0 0 0 100%
src/unit_cooler/actuator/worker.py subscribe_worker 10 0 0 0 0 100%
src/unit_cooler/actuator/worker.py monitor_worker 33 0 0 6 1 97%
src/unit_cooler/actuator/worker.py control_worker 32 2 0 8 1 92%
src/unit_cooler/actuator/worker.py get_worker_def 1 0 0 0 0 100%
src/unit_cooler/actuator/worker.py start 6 0 0 2 0 100%
src/unit_cooler/actuator/worker.py term 2 0 0 0 0 100%
src/unit_cooler/actuator/worker.py (no function) 30 0 37 0 0 100%
src/unit_cooler/const.py (no function) 18 0 0 0 0 100%
src/unit_cooler/controller/engine.py dummy_cooling_mode 19 1 0 12 1 94%
src/unit_cooler/controller/engine.py judge_cooling_mode 17 0 0 6 0 100%
src/unit_cooler/controller/engine.py gen_control_msg 14 0 0 4 0 100%
src/unit_cooler/controller/engine.py (no function) 12 0 11 0 0 100%
src/unit_cooler/controller/message.py print_control_msg 8 8 0 4 0 0%
src/unit_cooler/controller/message.py (no function) 4 0 9 0 0 100%
src/unit_cooler/controller/sensor.py get_outdoor_status 12 2 0 6 3 72%
src/unit_cooler/controller/sensor.py get_cooler_activity 11 0 1 6 0 100%
src/unit_cooler/controller/sensor.py get_cooler_state 15 0 0 12 0 100%
src/unit_cooler/controller/sensor.py get_sense_data 20 0 0 10 0 100%
src/unit_cooler/controller/sensor.py (no function) 26 0 14 0 0 100%
src/unit_cooler/metrics/__init__.py (no function) 3 0 0 0 0 100%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer.__init__ 1 1 0 0 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer.get_hourly_boxplot_data 15 15 0 6 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer.get_timeseries_data 5 5 0 0 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer.get_correlation_analysis 27 27 0 12 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer._calculate_hourly_boxplot 13 13 0 8 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer._detect_outliers 7 7 0 0 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer.get_summary_statistics 8 8 0 0 0 0%
src/unit_cooler/metrics/analyzer.py MetricsAnalyzer._get_column_stats 6 6 0 4 0 0%
src/unit_cooler/metrics/analyzer.py get_metrics_analyzer 1 1 0 0 0 0%
src/unit_cooler/metrics/analyzer.py (no function) 24 2 0 0 0 92%
src/unit_cooler/metrics/collector.py MetricsCollector.__init__ 8 0 0 0 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector._init_database 7 0 0 0 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector._get_db_connection 13 5 0 4 1 53%
src/unit_cooler/metrics/collector.py MetricsCollector.update_cooling_mode 3 0 0 0 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector.update_duty_ratio 4 0 0 2 1 83%
src/unit_cooler/metrics/collector.py MetricsCollector.update_environmental_data 12 0 0 10 5 77%
src/unit_cooler/metrics/collector.py MetricsCollector.update_flow_value 3 3 0 0 0 0%
src/unit_cooler/metrics/collector.py MetricsCollector.record_valve_operation 3 0 0 0 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector.record_error 7 7 0 0 0 0%
src/unit_cooler/metrics/collector.py MetricsCollector._check_minute_boundary 9 0 0 4 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector._check_hour_boundary 9 0 0 4 0 100%
src/unit_cooler/metrics/collector.py MetricsCollector._save_minute_data 11 4 0 2 1 62%
src/unit_cooler/metrics/collector.py MetricsCollector._save_hour_data 6 2 0 0 0 67%
src/unit_cooler/metrics/collector.py MetricsCollector.get_minute_data 16 16 0 6 0 0%
src/unit_cooler/metrics/collector.py MetricsCollector.get_hourly_data 16 16 0 6 0 0%
src/unit_cooler/metrics/collector.py MetricsCollector.get_error_data 16 16 0 6 0 0%
src/unit_cooler/metrics/collector.py get_metrics_collector 3 0 0 2 0 100%
src/unit_cooler/metrics/collector.py (no function) 30 0 0 0 0 100%
src/unit_cooler/metrics/webapi/__init__.py (no function) 0 0 0 0 0 100%
src/unit_cooler/metrics/webapi/page.py metrics_view 22 22 0 4 0 0%
src/unit_cooler/metrics/webapi/page.py favicon 9 9 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_cooler_metrics_icon 26 26 0 6 0 0%
src/unit_cooler/metrics/webapi/page.py get_data_period_info 23 23 0 12 0 0%
src/unit_cooler/metrics/webapi/page.py generate_statistics 16 16 0 6 0 0%
src/unit_cooler/metrics/webapi/page.py calculate_correlation 16 16 0 6 0 0%
src/unit_cooler/metrics/webapi/page.py calculate_boxplot_stats 18 18 0 2 0 0%
src/unit_cooler/metrics/webapi/page.py _extract_hour_from_timestamp 10 10 0 4 0 0%
src/unit_cooler/metrics/webapi/page.py _prepare_hourly_data 17 17 0 16 0 0%
src/unit_cooler/metrics/webapi/page.py _prepare_timeseries_data 30 30 0 16 0 0%
src/unit_cooler/metrics/webapi/page.py _prepare_correlation_data 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py _prepare_boxplot_data 9 9 0 2 0 0%
src/unit_cooler/metrics/webapi/page.py prepare_chart_data 5 5 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_metrics_html 4 4 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py _format_cooling_mode_avg 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py _format_duty_ratio_avg 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py _format_valve_operations 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_basic_stats_section 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_hourly_analysis_section 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_timeseries_section 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_correlation_section 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py generate_chart_javascript 1 1 0 0 0 0%
src/unit_cooler/metrics/webapi/page.py (no function) 35 0 0 0 0 100%
src/unit_cooler/pubsub/publish.py wait_first_client 14 0 0 6 1 95%
src/unit_cooler/pubsub/publish.py start_server 34 0 0 8 2 95%
src/unit_cooler/pubsub/publish.py start_proxy 49 0 4 14 2 97%
src/unit_cooler/pubsub/publish.py (no function) 8 0 28 0 0 100%
src/unit_cooler/pubsub/subscribe.py start_client 30 2 0 6 2 89%
src/unit_cooler/pubsub/subscribe.py (no function) 5 0 0 0 0 100%
src/unit_cooler/util.py notify_error 8 1 0 4 2 75%
src/unit_cooler/util.py (no function) 4 0 0 0 0 100%
src/unit_cooler/webui/webapi/__init__.py (no function) 0 0 0 0 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py init 1 0 0 0 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py watering 3 0 0 0 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py watering_list 1 0 0 0 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py get_last_message 3 0 0 2 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py get_stats 3 0 0 0 0 100%
src/unit_cooler/webui/webapi/cooler_stat.py api_get_stats 7 3 0 0 0 57%
src/unit_cooler/webui/webapi/cooler_stat.py (no function) 19 0 11 0 0 100%
src/unit_cooler/webui/worker.py term 2 2 0 0 0 0%
src/unit_cooler/webui/worker.py queue_put 6 0 0 2 0 100%
src/unit_cooler/webui/worker.py subscribe_worker 10 4 0 0 0 60%
src/unit_cooler/webui/worker.py (no function) 10 0 0 0 0 100%
src/webui.py term 10 10 0 4 0 0%
src/webui.py signal_handler 2 2 0 0 0 0%
src/webui.py create_app 30 4 5 0 0 87%
src/webui.py create_app.notify_terminate 0 0 3 0 0 100%
src/webui.py (no function) 21 0 23 0 0 100%
Total   1697 449 268 414 36 70%

No items found using the specified filter.