gitextract_3m8g0ek4/ ├── .coveragerc ├── .github/ │ ├── ISSUE_TEMPLATE.md │ ├── PULL_REQUEST_TEMPLATE.md │ └── workflows/ │ ├── delfin_ci.yml │ └── delfin_e2e_test.yml ├── .gitignore ├── CHANGELOG/ │ ├── CHANGELOG-v1.0.0.md │ └── CHANGELOG-v1.1.0.md ├── Dockerfile ├── LICENSE ├── README.md ├── codecov.yml ├── delfin/ │ ├── __init__.py │ ├── alert_manager/ │ │ ├── __init__.py │ │ ├── alert_processor.py │ │ ├── constants.py │ │ ├── rpcapi.py │ │ ├── snmp_validator.py │ │ └── trap_receiver.py │ ├── api/ │ │ ├── __init__.py │ │ ├── api_utils.py │ │ ├── common/ │ │ │ ├── __init__.py │ │ │ └── wsgi.py │ │ ├── contrib/ │ │ │ └── __init__.py │ │ ├── extensions.py │ │ ├── middlewares.py │ │ ├── schemas/ │ │ │ ├── __init__.py │ │ │ ├── access_info.py │ │ │ ├── alert_source.py │ │ │ ├── alerts.py │ │ │ ├── storage_capabilities_schema.py │ │ │ └── storages.py │ │ ├── v1/ │ │ │ ├── __init__.py │ │ │ ├── access_info.py │ │ │ ├── alert_source.py │ │ │ ├── alerts.py │ │ │ ├── controllers.py │ │ │ ├── disks.py │ │ │ ├── filesystems.py │ │ │ ├── masking_views.py │ │ │ ├── port_groups.py │ │ │ ├── ports.py │ │ │ ├── qtrees.py │ │ │ ├── quotas.py │ │ │ ├── router.py │ │ │ ├── shares.py │ │ │ ├── storage_host_groups.py │ │ │ ├── storage_host_initiators.py │ │ │ ├── storage_hosts.py │ │ │ ├── storage_pools.py │ │ │ ├── storages.py │ │ │ ├── volume_groups.py │ │ │ └── volumes.py │ │ ├── validation/ │ │ │ ├── __init__.py │ │ │ ├── parameter_types.py │ │ │ └── validators.py │ │ └── views/ │ │ ├── __init__.py │ │ ├── access_info.py │ │ ├── alert_source.py │ │ ├── alerts.py │ │ ├── controllers.py │ │ ├── disks.py │ │ ├── filesystems.py │ │ ├── masking_views.py │ │ ├── port_groups.py │ │ ├── ports.py │ │ ├── qtrees.py │ │ ├── quotas.py │ │ ├── shares.py │ │ ├── storage_host_groups.py │ │ ├── storage_host_initiators.py │ │ ├── storage_hosts.py │ │ ├── storage_pools.py │ │ ├── storages.py │ │ ├── volume_groups.py │ │ └── volumes.py │ ├── cmd/ │ │ ├── __init__.py │ │ ├── alert.py │ │ ├── api.py │ │ └── task.py │ ├── common/ │ │ ├── __init__.py │ │ ├── alert_util.py │ │ ├── config.py │ │ ├── constants.py │ │ └── sqlalchemyutils.py │ ├── context.py │ ├── coordination.py │ ├── cryptor.py │ ├── db/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── base.py │ │ └── sqlalchemy/ │ │ ├── __init__.py │ │ ├── api.py │ │ └── models.py │ ├── drivers/ │ │ ├── __init__.py │ │ ├── api.py │ │ ├── dell_emc/ │ │ │ ├── __init__.py │ │ │ ├── power_store/ │ │ │ │ ├── __init__.py │ │ │ │ ├── consts.py │ │ │ │ ├── power_store.py │ │ │ │ └── rest_handler.py │ │ │ ├── scaleio/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_consts.py │ │ │ │ ├── consts.py │ │ │ │ ├── rest_handler.py │ │ │ │ └── scaleio_stor.py │ │ │ ├── unity/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_handler.py │ │ │ │ ├── consts.py │ │ │ │ ├── rest_handler.py │ │ │ │ └── unity.py │ │ │ ├── vmax/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_handler/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── alert_mapper.py │ │ │ │ │ ├── oid_mapper.py │ │ │ │ │ ├── snmp_alerts.py │ │ │ │ │ └── unisphere_alerts.py │ │ │ │ ├── client.py │ │ │ │ ├── constants.py │ │ │ │ ├── perf_utils.py │ │ │ │ ├── rest.py │ │ │ │ └── vmax.py │ │ │ ├── vnx/ │ │ │ │ ├── __init__.py │ │ │ │ └── vnx_block/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_handler.py │ │ │ │ ├── component_handler.py │ │ │ │ ├── consts.py │ │ │ │ ├── navi_handler.py │ │ │ │ ├── navicli_client.py │ │ │ │ └── vnx_block.py │ │ │ └── vplex/ │ │ │ ├── __init__.py │ │ │ ├── alert_handler.py │ │ │ ├── consts.py │ │ │ ├── rest_handler.py │ │ │ └── vplex_stor.py │ │ ├── driver.py │ │ ├── fake_storage/ │ │ │ └── __init__.py │ │ ├── fujitsu/ │ │ │ ├── __init__.py │ │ │ └── eternus/ │ │ │ ├── __init__.py │ │ │ ├── cli_handler.py │ │ │ ├── consts.py │ │ │ ├── eternus_ssh_client.py │ │ │ └── eternus_stor.py │ │ ├── h3c/ │ │ │ ├── __init__.py │ │ │ └── unistor_cf/ │ │ │ ├── __init__.py │ │ │ └── unistor_cf.py │ │ ├── helper.py │ │ ├── hitachi/ │ │ │ ├── __init__.py │ │ │ ├── hnas/ │ │ │ │ ├── __init__.py │ │ │ │ ├── constants.py │ │ │ │ ├── hds_nas.py │ │ │ │ └── nas_handler.py │ │ │ └── vsp/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── rest_handler.py │ │ │ └── vsp_stor.py │ │ ├── hpe/ │ │ │ ├── __init__.py │ │ │ ├── hpe_3par/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_handler.py │ │ │ │ ├── component_handler.py │ │ │ │ ├── consts.py │ │ │ │ ├── hpe_3parstor.py │ │ │ │ ├── rest_handler.py │ │ │ │ └── ssh_handler.py │ │ │ └── hpe_msa/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── hpe_msastor.py │ │ │ └── ssh_handler.py │ │ ├── huawei/ │ │ │ ├── __init__.py │ │ │ └── oceanstor/ │ │ │ ├── __init__.py │ │ │ ├── alert_handler.py │ │ │ ├── consts.py │ │ │ ├── oceanstor.py │ │ │ ├── oid_mapper.py │ │ │ └── rest_client.py │ │ ├── ibm/ │ │ │ ├── __init__.py │ │ │ ├── ds8k/ │ │ │ │ ├── __init__.py │ │ │ │ ├── alert_handler.py │ │ │ │ ├── consts.py │ │ │ │ ├── ds8k.py │ │ │ │ └── rest_handler.py │ │ │ └── storwize_svc/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── ssh_handler.py │ │ │ └── storwize_svc.py │ │ ├── inspur/ │ │ │ ├── __init__.py │ │ │ └── as5500/ │ │ │ ├── __init__.py │ │ │ └── as5500.py │ │ ├── macro_san/ │ │ │ ├── __init__.py │ │ │ └── ms/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── file/ │ │ │ │ └── __init__.py │ │ │ ├── macro_ssh_client.py │ │ │ ├── ms_handler.py │ │ │ └── ms_stor.py │ │ ├── manager.py │ │ ├── netapp/ │ │ │ ├── __init__.py │ │ │ └── dataontap/ │ │ │ ├── __init__.py │ │ │ ├── cluster_mode.py │ │ │ ├── constants.py │ │ │ ├── mapping_handler.py │ │ │ ├── netapp_handler.py │ │ │ └── performance_handler.py │ │ ├── pure/ │ │ │ ├── __init__.py │ │ │ └── flasharray/ │ │ │ ├── __init__.py │ │ │ ├── consts.py │ │ │ ├── pure_flasharray.py │ │ │ └── rest_handler.py │ │ └── utils/ │ │ ├── __init__.py │ │ ├── performance_file/ │ │ │ ├── __init__.py │ │ │ ├── macro_san/ │ │ │ │ └── __init__.py │ │ │ ├── svc/ │ │ │ │ └── __init__.py │ │ │ └── vnx_block/ │ │ │ └── __init__.py │ │ ├── rest_client.py │ │ ├── ssh_client.py │ │ └── tools.py │ ├── exception.py │ ├── exporter/ │ │ ├── __init__.py │ │ ├── base_exporter.py │ │ ├── example.py │ │ ├── kafka/ │ │ │ ├── __init__.py │ │ │ ├── exporter.py │ │ │ └── kafka.py │ │ └── prometheus/ │ │ ├── __init__.py │ │ ├── alert_manager.py │ │ ├── exporter.py │ │ ├── exporter_server.py │ │ └── prometheus.py │ ├── i18n.py │ ├── leader_election/ │ │ ├── __init__.py │ │ ├── distributor/ │ │ │ ├── __init__.py │ │ │ ├── perf_job_manager.py │ │ │ └── task_distributor.py │ │ ├── factory.py │ │ ├── interface.py │ │ └── tooz/ │ │ ├── __init__.py │ │ ├── callback.py │ │ └── leader_elector.py │ ├── manager.py │ ├── rpc.py │ ├── service.py │ ├── ssl_utils.py │ ├── task_manager/ │ │ ├── __init__.py │ │ ├── manager.py │ │ ├── metrics_manager.py │ │ ├── metrics_rpcapi.py │ │ ├── perf_job_controller.py │ │ ├── rpcapi.py │ │ ├── scheduler/ │ │ │ ├── __init__.py │ │ │ ├── schedule_manager.py │ │ │ └── schedulers/ │ │ │ ├── __init__.py │ │ │ └── telemetry/ │ │ │ ├── __init__.py │ │ │ ├── failed_performance_collection_handler.py │ │ │ ├── job_handler.py │ │ │ └── performance_collection_handler.py │ │ ├── subprocess_manager.py │ │ ├── subprocess_rpcapi.py │ │ └── tasks/ │ │ ├── __init__.py │ │ ├── alerts.py │ │ ├── resources.py │ │ └── telemetry.py │ ├── test.py │ ├── tests/ │ │ ├── __init__.py │ │ ├── e2e/ │ │ │ ├── GetResources.robot │ │ │ ├── GetStorage.robot │ │ │ ├── README.md │ │ │ ├── RegisterStorage.robot │ │ │ ├── RemoveStorage.robot │ │ │ ├── UpdateAccessInfo.robot │ │ │ ├── __init__.py │ │ │ ├── test.json │ │ │ ├── test_e2e.sh │ │ │ └── testdriver/ │ │ │ ├── __init__.py │ │ │ └── storage.json │ │ └── unit/ │ │ ├── __init__.py │ │ ├── alert_manager/ │ │ │ ├── __init__.py │ │ │ ├── fakes.py │ │ │ ├── test_alert_processor.py │ │ │ ├── test_snmp_validator.py │ │ │ └── test_trap_receiver.py │ │ ├── api/ │ │ │ ├── __init__.py │ │ │ ├── extensions/ │ │ │ │ ├── __init__.py │ │ │ │ └── foxinsocks.py │ │ │ ├── fakes.py │ │ │ ├── test_api_validation.py │ │ │ ├── test_extensions.py │ │ │ ├── test_middlewares.py │ │ │ ├── test_wsgi.py │ │ │ └── v1/ │ │ │ ├── __init__.py │ │ │ ├── test_access_info.py │ │ │ ├── test_alert_source.py │ │ │ ├── test_alerts.py │ │ │ ├── test_storage_pools.py │ │ │ ├── test_storages.py │ │ │ └── test_volumes.py │ │ ├── conf_fixture.py │ │ ├── db/ │ │ │ ├── __init__.py │ │ │ └── test_db_api.py │ │ ├── drivers/ │ │ │ ├── __init__.py │ │ │ ├── dell_emc/ │ │ │ │ ├── __init__.py │ │ │ │ ├── power_store/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_power_store.py │ │ │ │ ├── scaleio/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_constans.py │ │ │ │ │ └── test_scaleio_stor.py │ │ │ │ ├── unity/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_emc_unity.py │ │ │ │ ├── vmax/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_alert_handler.py │ │ │ │ │ └── test_vmax.py │ │ │ │ ├── vnx/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── vnx_block/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_vnx_block.py │ │ │ │ └── vplex/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_emc_vplex.py │ │ │ ├── fujitsu/ │ │ │ │ ├── __init__.py │ │ │ │ └── eternus/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_eternus_stor.py │ │ │ ├── hitachi/ │ │ │ │ ├── __init__.py │ │ │ │ ├── hnas/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── constants.py │ │ │ │ │ └── test_hnas.py │ │ │ │ └── vsp/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_hitachi_vspstor.py │ │ │ ├── hpe/ │ │ │ │ ├── __init__.py │ │ │ │ ├── hpe_3par/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_hpe_3parstor.py │ │ │ │ └── hpe_msa/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_constans.py │ │ │ │ └── test_hpe_msastor.py │ │ │ ├── huawei/ │ │ │ │ ├── __init__.py │ │ │ │ └── oceanstor/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_alert_handler.py │ │ │ │ ├── test_oceanstor.py │ │ │ │ └── test_rest_client.py │ │ │ ├── ibm/ │ │ │ │ ├── __init__.py │ │ │ │ ├── ibm_ds8k/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── test_ibm_ds8k.py │ │ │ │ └── storwize_svc/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_ibm_storwize_svc.py │ │ │ ├── macro_san/ │ │ │ │ ├── __init__.py │ │ │ │ └── ms/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_ms_stor.py │ │ │ ├── netapp/ │ │ │ │ ├── __init__.py │ │ │ │ └── netapp_ontap/ │ │ │ │ ├── __init__.py │ │ │ │ ├── test_constans.py │ │ │ │ └── test_netapp.py │ │ │ ├── pure/ │ │ │ │ ├── __init__.py │ │ │ │ └── flasharray/ │ │ │ │ ├── __init__.py │ │ │ │ └── test_pure_flasharray.py │ │ │ ├── test_api.py │ │ │ └── test_manager.py │ │ ├── exporter/ │ │ │ └── prometheus/ │ │ │ ├── __init__.py │ │ │ └── test_prometheus.py │ │ ├── fake_data.py │ │ ├── fake_notifier.py │ │ ├── leader_election/ │ │ │ ├── __init__.py │ │ │ └── distributor/ │ │ │ ├── __init__.py │ │ │ └── test_task_distributor.py │ │ ├── task_manager/ │ │ │ ├── __init__.py │ │ │ ├── scheduler/ │ │ │ │ ├── __init__.py │ │ │ │ ├── schedulers/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ └── telemetry/ │ │ │ │ │ ├── __init__.py │ │ │ │ │ ├── test_failed_performance_collection_handler.py │ │ │ │ │ ├── test_job_handler.py │ │ │ │ │ └── test_performance_collection_handler.py │ │ │ │ └── test_scheduler.py │ │ │ ├── test_alert_task.py │ │ │ ├── test_resources.py │ │ │ └── test_telemetry.py │ │ ├── test_context.py │ │ ├── test_coordination.py │ │ ├── test_manager.py │ │ ├── test_rpc.py │ │ ├── utils.py │ │ └── wsgi/ │ │ ├── __init__.py │ │ └── test_common.py │ ├── utils.py │ ├── version.py │ └── wsgi/ │ ├── __init__.py │ └── common.py ├── docker-compose.yml ├── etc/ │ └── delfin/ │ ├── api-paste.ini │ └── delfin.conf ├── installer/ │ ├── README.md │ ├── ansible/ │ │ ├── clean.yml │ │ ├── group_vars/ │ │ │ └── delfin.yml │ │ ├── local.hosts │ │ ├── roles/ │ │ │ ├── cleaner/ │ │ │ │ ├── scenarios/ │ │ │ │ │ ├── delfin.yml │ │ │ │ │ └── release.yml │ │ │ │ └── tasks/ │ │ │ │ └── main.yml │ │ │ └── delfin-installer/ │ │ │ ├── scenarios/ │ │ │ │ ├── container.yml │ │ │ │ ├── rabbitmq.yml │ │ │ │ ├── redis.yml │ │ │ │ ├── source-code.yml │ │ │ │ └── start-delfin.yml │ │ │ └── tasks/ │ │ │ └── main.yml │ │ ├── script/ │ │ │ ├── create_db.py │ │ │ └── virtualenv3_exec.j2 │ │ └── site.yml │ ├── helper.py │ ├── install │ ├── install.conf │ ├── install_delfin.py │ ├── install_dependencies.sh │ ├── precheck │ ├── uninstall │ └── util.sh ├── openapi-spec/ │ └── swagger.yaml ├── requirements.txt ├── script/ │ ├── create_db.py │ └── start.sh ├── setup.cfg ├── setup.py ├── test-requirements.txt └── tox.ini