Coverage report: 88%

Files Functions Classes

coverage.py v7.8.2, created at 2025-06-17 12:22 +0000

File statements missing excluded branches partial coverage
watcher/__init__.py 2 0 0 0 0 100%
watcher/_i18n.py 11 1 0 0 0 91%
watcher/api/__init__.py 0 0 0 0 0 100%
watcher/api/acl.py 7 0 0 2 0 100%
watcher/api/app.py 20 2 0 2 1 86%
watcher/api/config.py 9 0 0 2 0 100%
watcher/api/controllers/__init__.py 0 0 0 0 0 100%
watcher/api/controllers/base.py 57 3 0 14 1 94%
watcher/api/controllers/link.py 24 2 0 2 0 92%
watcher/api/controllers/root.py 65 0 0 2 0 100%
watcher/api/controllers/v1/__init__.py 119 8 0 16 2 88%
watcher/api/controllers/v1/action.py 166 13 0 26 3 92%
watcher/api/controllers/v1/action_plan.py 296 30 0 80 20 86%
watcher/api/controllers/v1/audit.py 392 44 0 120 22 85%
watcher/api/controllers/v1/audit_template.py 371 31 0 114 21 88%
watcher/api/controllers/v1/collection.py 19 0 0 2 0 100%
watcher/api/controllers/v1/data_model.py 28 2 0 6 2 88%
watcher/api/controllers/v1/efficacy_indicator.py 22 0 0 4 0 100%
watcher/api/controllers/v1/goal.py 104 7 0 12 2 92%
watcher/api/controllers/v1/scoring_engine.py 108 7 0 8 2 92%
watcher/api/controllers/v1/service.py 126 9 0 14 4 91%
watcher/api/controllers/v1/strategy.py 176 15 0 34 11 87%
watcher/api/controllers/v1/types.py 131 20 0 34 2 79%
watcher/api/controllers/v1/utils.py 89 8 0 44 0 88%
watcher/api/controllers/v1/versions.py 17 0 0 0 0 100%
watcher/api/controllers/v1/webhooks.py 29 1 0 6 1 94%
watcher/api/hooks.py 34 0 0 8 0 100%
watcher/api/middleware/__init__.py 0 0 0 0 0 100%
watcher/api/middleware/auth_token.py 22 8 0 2 0 58%
watcher/api/middleware/parsable_error.py 38 8 0 6 1 80%
watcher/api/scheduling.py 56 10 0 14 2 80%
watcher/api/wsgi.py 16 16 0 2 0 0%
watcher/applier/__init__.py 0 0 0 0 0 100%
watcher/applier/action_plan/__init__.py 0 0 0 0 0 100%
watcher/applier/action_plan/base.py 2 0 3 0 0 100%
watcher/applier/action_plan/default.py 61 9 0 10 3 83%
watcher/applier/actions/__init__.py 0 0 0 0 0 100%
watcher/applier/actions/base.py 37 1 55 6 1 95%
watcher/applier/actions/change_node_power_state.py 57 6 0 16 5 85%
watcher/applier/actions/change_nova_service_state.py 48 2 0 12 3 92%
watcher/applier/actions/factory.py 13 0 0 0 0 100%
watcher/applier/actions/migration.py 81 10 0 14 5 84%
watcher/applier/actions/nop.py 26 1 0 0 0 96%
watcher/applier/actions/resize.py 37 7 0 2 1 79%
watcher/applier/actions/sleep.py 28 6 0 0 0 79%
watcher/applier/actions/volume_migration.py 108 12 0 16 5 86%
watcher/applier/base.py 2 0 3 0 0 100%
watcher/applier/default.py 32 0 0 2 1 97%
watcher/applier/loading/__init__.py 0 0 0 0 0 100%
watcher/applier/loading/default.py 7 0 0 0 0 100%
watcher/applier/manager.py 26 0 0 0 0 100%
watcher/applier/messaging/__init__.py 0 0 0 0 0 100%
watcher/applier/messaging/trigger.py 21 2 0 0 0 90%
watcher/applier/rpcapi.py 35 0 0 2 0 100%
watcher/applier/sync.py 38 17 0 8 0 54%
watcher/applier/workflow_engine/__init__.py 0 0 0 0 0 100%
watcher/applier/workflow_engine/base.py 145 22 18 20 2 85%
watcher/applier/workflow_engine/default.py 92 17 0 18 1 82%
watcher/cmd/__init__.py 2 0 0 0 0 100%
watcher/cmd/api.py 20 2 0 2 0 91%
watcher/cmd/applier.py 17 0 0 0 0 100%
watcher/cmd/dbmanage.py 64 26 0 2 0 61%
watcher/cmd/decisionengine.py 22 0 0 0 0 100%
watcher/cmd/status.py 19 2 0 2 1 86%
watcher/cmd/sync.py 13 13 0 0 0 0%
watcher/common/__init__.py 0 0 0 0 0 100%
watcher/common/cinder_helper.py 160 6 0 38 4 94%
watcher/common/clients.py 153 19 0 26 1 85%
watcher/common/config.py 9 0 0 0 0 100%
watcher/common/context.py 39 1 0 4 0 98%
watcher/common/exception.py 247 9 0 10 2 95%
watcher/common/ironic_helper.py 20 0 0 2 0 100%
watcher/common/keystone_helper.py 77 58 0 18 0 20%
watcher/common/loader/__init__.py 0 0 0 0 0 100%
watcher/common/loader/base.py 2 0 6 0 0 100%
watcher/common/loader/default.py 44 1 0 4 1 96%
watcher/common/loader/loadable.py 11 0 18 0 0 100%
watcher/common/metal_helper/__init__.py 0 0 0 0 0 100%
watcher/common/metal_helper/base.py 28 0 20 8 0 100%
watcher/common/metal_helper/constants.py 6 0 0 0 0 100%
watcher/common/metal_helper/factory.py 11 0 0 4 1 93%
watcher/common/metal_helper/ironic.py 48 0 0 10 0 100%
watcher/common/metal_helper/maas.py 64 19 0 14 2 65%
watcher/common/nova_helper.py 348 35 0 104 16 89%
watcher/common/paths.py 9 9 0 0 0 0%
watcher/common/placement_helper.py 77 2 0 18 2 96%
watcher/common/policies/__init__.py 13 0 0 0 0 100%
watcher/common/policies/action.py 6 0 0 0 0 100%
watcher/common/policies/action_plan.py 6 0 0 0 0 100%
watcher/common/policies/audit.py 6 0 0 0 0 100%
watcher/common/policies/audit_template.py 6 0 0 0 0 100%
watcher/common/policies/base.py 7 0 0 0 0 100%
watcher/common/policies/data_model.py 6 0 0 0 0 100%
watcher/common/policies/goal.py 6 0 0 0 0 100%
watcher/common/policies/scoring_engine.py 6 0 0 0 0 100%
watcher/common/policies/service.py 6 0 0 0 0 100%
watcher/common/policies/strategy.py 6 0 0 0 0 100%
watcher/common/policy.py 32 11 0 10 1 62%
watcher/common/rpc.py 70 11 0 8 3 79%
watcher/common/scheduling.py 31 1 0 6 3 89%
watcher/common/service.py 151 7 0 26 6 93%
watcher/common/service_manager.py 2 0 28 0 0 100%
watcher/common/utils.py 89 44 0 20 4 52%
watcher/conf/__init__.py 50 0 0 0 0 100%
watcher/conf/api.py 10 0 0 0 0 100%
watcher/conf/applier.py 10 0 0 0 0 100%
watcher/conf/cinder_client.py 8 0 0 0 0 100%
watcher/conf/clients_auth.py 7 0 0 0 0 100%
watcher/conf/collector.py 8 0 0 0 0 100%
watcher/conf/datasources.py 10 0 0 0 0 100%
watcher/conf/db.py 12 0 0 0 0 100%
watcher/conf/decision_engine.py 8 0 0 0 0 100%
watcher/conf/exception.py 6 0 0 0 0 100%
watcher/conf/glance_client.py 8 0 0 0 0 100%
watcher/conf/gnocchi_client.py 8 0 0 0 0 100%
watcher/conf/grafana_client.py 8 0 0 0 0 100%
watcher/conf/grafana_translators.py 8 0 0 0 0 100%
watcher/conf/ironic_client.py 8 0 0 0 0 100%
watcher/conf/keystone_client.py 8 0 0 0 0 100%
watcher/conf/maas_client.py 8 0 0 0 0 100%
watcher/conf/monasca_client.py 8 0 0 0 0 100%
watcher/conf/neutron_client.py 8 0 0 0 0 100%
watcher/conf/nova_client.py 9 0 0 0 0 100%
watcher/conf/opts.py 28 2 0 10 1 92%
watcher/conf/paths.py 13 2 0 0 0 85%
watcher/conf/placement_client.py 8 0 0 0 0 100%
watcher/conf/planner.py 9 0 0 0 0 100%
watcher/conf/plugins.py 28 5 0 10 0 82%
watcher/conf/prometheus_client.py 8 0 0 0 0 100%
watcher/conf/service.py 8 0 0 0 0 100%
watcher/db/__init__.py 0 0 0 0 0 100%
watcher/db/api.py 15 0 730 0 0 100%
watcher/db/migration.py 20 10 0 2 0 45%
watcher/db/purge.py 246 17 0 44 3 91%
watcher/db/sqlalchemy/__init__.py 0 0 0 0 0 100%
watcher/db/sqlalchemy/alembic/env.py 12 0 0 0 0 100%
watcher/db/sqlalchemy/alembic/versions/001_ocata.py 26 9 0 0 0 65%
watcher/db/sqlalchemy/alembic/versions/0f6042416884_add_apscheduler_jobs.py 17 2 0 2 1 84%
watcher/db/sqlalchemy/alembic/versions/15f7375ca737_change_efficiacy_indicator_decimals.py 6 0 0 0 0 100%
watcher/db/sqlalchemy/alembic/versions/3cfc94cecf4e_add_name_for_audit.py 8 1 0 0 0 88%
watcher/db/sqlalchemy/alembic/versions/4b16194c56bc_add_start_end_time.py 10 2 0 0 0 80%
watcher/db/sqlalchemy/alembic/versions/52804f2498c4_add_hostname.py 10 2 0 4 0 71%
watcher/db/sqlalchemy/alembic/versions/609bec748f2a_add_force_field.py 8 1 0 0 0 88%
watcher/db/sqlalchemy/alembic/versions/a86240e89a29_.py 22 9 0 4 1 54%
watcher/db/sqlalchemy/alembic/versions/d098df6021e2_cron_support_for_audit.py 10 2 0 0 0 80%
watcher/db/sqlalchemy/alembic/versions/d09a5945e4a0_add_action_description_table.py 9 1 0 0 0 89%
watcher/db/sqlalchemy/api.py 643 41 0 106 3 94%
watcher/db/sqlalchemy/job_store.py 54 28 0 4 0 45%
watcher/db/sqlalchemy/migration.py 39 9 0 6 3 73%
watcher/db/sqlalchemy/models.py 166 2 0 10 2 98%
watcher/decision_engine/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/audit/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/audit/base.py 77 1 12 10 2 97%
watcher/decision_engine/audit/continuous.py 121 18 0 48 11 82%
watcher/decision_engine/audit/event.py 6 2 0 0 0 67%
watcher/decision_engine/audit/oneshot.py 6 0 0 0 0 100%
watcher/decision_engine/datasources/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/datasources/base.py 36 2 153 4 0 95%
watcher/decision_engine/datasources/gnocchi.py 107 25 0 32 13 70%
watcher/decision_engine/datasources/grafana.py 117 8 1 24 8 89%
watcher/decision_engine/datasources/grafana_translator/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/datasources/grafana_translator/base.py 33 4 8 8 2 85%
watcher/decision_engine/datasources/grafana_translator/influxdb.py 38 3 0 6 0 93%
watcher/decision_engine/datasources/manager.py 96 17 0 26 1 84%
watcher/decision_engine/datasources/monasca.py 70 10 9 14 2 81%
watcher/decision_engine/datasources/prometheus.py 173 11 1 62 6 92%
watcher/decision_engine/gmr.py 17 0 0 2 0 100%
watcher/decision_engine/goal/__init__.py 10 0 0 0 0 100%
watcher/decision_engine/goal/base.py 11 0 21 0 0 100%
watcher/decision_engine/goal/efficacy/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/goal/efficacy/base.py 25 0 20 6 0 100%
watcher/decision_engine/goal/efficacy/indicators.py 116 12 8 0 0 90%
watcher/decision_engine/goal/efficacy/specs.py 50 0 0 12 1 98%
watcher/decision_engine/goal/goals.py 133 10 0 0 0 92%
watcher/decision_engine/loading/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/loading/default.py 19 0 0 0 0 100%
watcher/decision_engine/manager.py 32 0 0 0 0 100%
watcher/decision_engine/messaging/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/messaging/audit_endpoint.py 29 1 0 4 2 91%
watcher/decision_engine/messaging/data_model_endpoint.py 30 3 0 8 3 84%
watcher/decision_engine/model/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/model/base.py 2 0 6 0 0 100%
watcher/decision_engine/model/collector/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/model/collector/base.py 56 6 33 4 1 88%
watcher/decision_engine/model/collector/cinder.py 102 13 0 16 3 86%
watcher/decision_engine/model/collector/ironic.py 46 22 0 8 2 48%
watcher/decision_engine/model/collector/manager.py 26 1 0 8 2 91%
watcher/decision_engine/model/collector/nova.py 184 20 0 58 9 87%
watcher/decision_engine/model/element/__init__.py 13 0 0 0 0 100%
watcher/decision_engine/model/element/baremetal_resource.py 6 0 0 0 0 100%
watcher/decision_engine/model/element/base.py 27 0 3 6 0 100%
watcher/decision_engine/model/element/compute_resource.py 6 0 0 0 0 100%
watcher/decision_engine/model/element/instance.py 20 0 1 0 0 100%
watcher/decision_engine/model/element/node.py 36 0 4 0 0 100%
watcher/decision_engine/model/element/storage_resource.py 6 0 0 0 0 100%
watcher/decision_engine/model/element/volume.py 20 0 1 0 0 100%
watcher/decision_engine/model/model_root.py 474 29 0 116 22 91%
watcher/decision_engine/model/notification/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/model/notification/base.py 9 0 5 0 0 100%
watcher/decision_engine/model/notification/cinder.py 209 33 0 24 4 82%
watcher/decision_engine/model/notification/filtering.py 29 4 0 20 4 84%
watcher/decision_engine/model/notification/nova.py 202 26 0 36 11 84%
watcher/decision_engine/planner/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/planner/base.py 6 0 14 0 0 100%
watcher/decision_engine/planner/manager.py 12 0 0 0 0 100%
watcher/decision_engine/planner/node_resource_consolidation.py 78 7 0 22 1 92%
watcher/decision_engine/planner/weight.py 85 8 0 26 3 90%
watcher/decision_engine/planner/workload_stabilization.py 141 13 3 26 4 90%
watcher/decision_engine/rpcapi.py 39 0 0 2 0 100%
watcher/decision_engine/scheduling.py 60 1 0 6 1 97%
watcher/decision_engine/scope/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/scope/baremetal.py 32 3 0 20 7 81%
watcher/decision_engine/scope/base.py 7 0 3 0 0 100%
watcher/decision_engine/scope/compute.py 135 8 0 76 12 91%
watcher/decision_engine/scope/storage.py 104 3 0 62 7 94%
watcher/decision_engine/scoring/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/scoring/base.py 10 0 57 0 0 100%
watcher/decision_engine/scoring/dummy_scorer.py 56 4 0 14 2 91%
watcher/decision_engine/scoring/dummy_scoring_container.py 33 4 0 4 2 84%
watcher/decision_engine/scoring/scoring_factory.py 29 0 0 10 0 100%
watcher/decision_engine/solution/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/solution/base.py 22 0 18 0 0 100%
watcher/decision_engine/solution/default.py 25 2 0 8 1 91%
watcher/decision_engine/solution/efficacy.py 40 4 0 4 1 89%
watcher/decision_engine/solution/solution_comparator.py 2 2 3 0 0 0%
watcher/decision_engine/solution/solution_evaluator.py 2 2 3 0 0 0%
watcher/decision_engine/strategy/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/strategy/common/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/strategy/common/level.py 6 0 0 0 0 100%
watcher/decision_engine/strategy/context/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/strategy/context/base.py 13 0 12 0 0 100%
watcher/decision_engine/strategy/context/default.py 29 0 0 4 1 97%
watcher/decision_engine/strategy/selection/__init__.py 0 0 0 0 0 100%
watcher/decision_engine/strategy/selection/base.py 2 0 3 0 0 100%
watcher/decision_engine/strategy/selection/default.py 29 0 0 4 0 100%
watcher/decision_engine/strategy/strategies/__init__.py 33 0 0 0 0 100%
watcher/decision_engine/strategy/strategies/actuation.py 28 2 0 2 0 93%
watcher/decision_engine/strategy/strategies/base.py 269 46 46 50 9 77%
watcher/decision_engine/strategy/strategies/basic_consolidation.py 165 8 0 40 6 93%
watcher/decision_engine/strategy/strategies/dummy_strategy.py 32 1 0 0 0 97%
watcher/decision_engine/strategy/strategies/dummy_with_resize.py 35 15 0 0 0 57%
watcher/decision_engine/strategy/strategies/dummy_with_scorer.py 67 2 0 0 0 97%
watcher/decision_engine/strategy/strategies/host_maintenance.py 102 9 0 34 6 88%
watcher/decision_engine/strategy/strategies/node_resource_consolidation.py 154 7 0 72 11 92%
watcher/decision_engine/strategy/strategies/noisy_neighbor.py 125 17 0 42 11 83%
watcher/decision_engine/strategy/strategies/outlet_temp_control.py 106 17 0 28 10 80%
watcher/decision_engine/strategy/strategies/saving_energy.py 90 9 0 22 4 87%
watcher/decision_engine/strategy/strategies/storage_capacity_balance.py 225 25 0 84 21 85%
watcher/decision_engine/strategy/strategies/uniform_airflow.py 136 15 0 42 11 85%
watcher/decision_engine/strategy/strategies/vm_workload_consolidation.py 256 22 0 94 15 88%
watcher/decision_engine/strategy/strategies/workload_balance.py 154 25 0 50 13 80%
watcher/decision_engine/strategy/strategies/workload_stabilization.py 256 22 0 86 13 89%
watcher/decision_engine/strategy/strategies/zone_migration.py 404 34 0 138 31 88%
watcher/decision_engine/sync.py 315 24 0 122 17 90%
watcher/decision_engine/threading.py 26 0 0 4 0 100%
watcher/eventlet.py 13 0 0 4 1 94%
watcher/notifications/__init__.py 7 0 0 0 0 100%
watcher/notifications/action.py 126 0 0 6 0 100%
watcher/notifications/action_plan.py 137 0 0 8 2 99%
watcher/notifications/audit.py 116 1 0 10 1 98%
watcher/notifications/base.py 77 4 0 14 1 95%
watcher/notifications/exception.py 19 0 0 0 0 100%
watcher/notifications/goal.py 11 0 0 0 0 100%
watcher/notifications/service.py 38 2 0 2 1 92%
watcher/notifications/strategy.py 11 0 0 0 0 100%
watcher/objects/__init__.py 11 0 0 0 0 100%
watcher/objects/action.py 71 0 0 4 0 100%
watcher/objects/action_description.py 47 3 0 6 1 92%
watcher/objects/action_plan.py 121 2 0 14 0 99%
watcher/objects/audit.py 118 3 0 8 0 98%
watcher/objects/audit_template.py 62 0 0 4 0 100%
watcher/objects/base.py 61 0 0 20 0 100%
watcher/objects/efficacy_indicator.py 51 0 0 4 0 100%
watcher/objects/fields.py 101 4 0 14 3 94%
watcher/objects/goal.py 60 5 0 4 1 91%
watcher/objects/scoring_engine.py 58 2 0 4 2 94%
watcher/objects/service.py 50 1 0 6 1 96%
watcher/objects/strategy.py 60 0 0 8 0 100%
watcher/version.py 3 0 0 0 0 100%
watcher/wsgi/__init__.py 0 0 0 0 0 100%
watcher/wsgi/api.py 6 6 0 2 0 0%
Total 15277 1453 1329 3142 528 88%

No items found using the specified filter.