howler-api 4.0.0.dev1020__tar.gz → 4.0.0.dev1038__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/PKG-INFO +1 -1
- howler_api-4.0.0.dev1038/howler/healthz.py +91 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/pyproject.toml +1 -1
- howler_api-4.0.0.dev1020/howler/healthz.py +0 -47
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/add_label.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/add_to_bundle.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/change_field.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/demote.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/example_plugin.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/prioritization.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/promote.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/remove_from_bundle.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/remove_label.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/actions/transition.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/base.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/socket.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/action.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/analytic.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/auth.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/clue.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/configs.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/dossier.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/help.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/hit.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/notebook.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/overview.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/search.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/template.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/tool.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/user.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/utils/etag.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/utils/params.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/api/v1/view.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/app.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/classification.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/classification.yml +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/exceptions.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/loader.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/logging/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/logging/audit.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/logging/format.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/net.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/net_static.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/random_user.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/common/swagger.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/config.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/action_queue_worker.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/retention.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/rules.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/view_cleanup.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/bulk.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/collection.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/constants.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/exceptions.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/howler_store.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/migrations/fix_process.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/operations.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/schemas.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/store.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/support/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/support/build.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/support/schemas.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/types.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/error.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/generate_mitre.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/generate_sigma_rules.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/generate_tlds.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/reindex_data.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/wipe_databases.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/gunicorn_config.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/azure.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/discover.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/hit.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/oauth.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/search.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/workflow.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/helper/ws.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/base.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/charter.txt +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/helper.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/howler_enum.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/action.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/analytic.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/assemblyline.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/aws.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/azure.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/cbs.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/clue.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/config.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/dossier.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/agent.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/autonomous_system.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/client.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/cloud.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/code_signature.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/container.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/dns.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/egress.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/elf.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/email.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/error.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/event.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/faas.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/file.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/geo.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/group.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/hash.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/host.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/http.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/ingress.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/interface.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/network.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/observer.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/organization.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/os.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/pe.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/process.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/registry.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/related.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/rule.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/server.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/threat.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/tls.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/url.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/user.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/user_agent.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/vulnerability.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/gcp.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/hit.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/howler_data.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/lead.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/localized_label.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/overview.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/pivot.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/template.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/user.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/view.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/random_data.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/randomizer.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/patched.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/plugins/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/plugins/config.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/README.md +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/counters.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/events.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/hash.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/lock.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/comms.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/multi.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/named.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/priority.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/set.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/user_quota_tracker.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/security/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/security/socket.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/security/utils.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/action_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/analytic_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/auth_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/config_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/dossier_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/event_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/hit_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/jwt_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/lucene_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/notebook_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/overview_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/template_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/services/user_service.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/telemetry.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/__init__.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/annotations.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/chunk.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/compat.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/constants.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/dict_utils.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/isotime.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/list_utils.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/lucene.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/path.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/socket_utils.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/str_utils.py +0 -0
- {howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/utils/uid.py +0 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
from flask import Blueprint, abort, make_response
|
|
2
|
+
from redis import RedisError
|
|
3
|
+
|
|
4
|
+
from howler import config as howler_config
|
|
5
|
+
from howler.common.loader import datastore
|
|
6
|
+
from howler.common.logging import get_logger
|
|
7
|
+
|
|
8
|
+
API_PREFIX = "/api/healthz"
|
|
9
|
+
healthz = Blueprint("healthz", __name__, url_prefix=API_PREFIX)
|
|
10
|
+
logger = get_logger(__file__)
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _is_datastore_healthy() -> bool:
|
|
14
|
+
"""Check whether the datastore is reachable."""
|
|
15
|
+
try:
|
|
16
|
+
if datastore().ds.ping():
|
|
17
|
+
return True
|
|
18
|
+
except Exception as error: # noqa: BLE001
|
|
19
|
+
logger.warning("Health check failed: datastore ping raised %s", error)
|
|
20
|
+
return False
|
|
21
|
+
|
|
22
|
+
logger.warning("Health check failed: datastore ping returned false")
|
|
23
|
+
return False
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _is_redis_healthy() -> bool:
|
|
27
|
+
"""Check whether configured Redis clients are reachable."""
|
|
28
|
+
redis_config = howler_config.config.core.redis
|
|
29
|
+
|
|
30
|
+
if redis_config.nonpersistent.host:
|
|
31
|
+
try:
|
|
32
|
+
if not howler_config.redis.ping():
|
|
33
|
+
logger.warning("Health check failed: nonpersistent Redis ping returned false")
|
|
34
|
+
return False
|
|
35
|
+
except (ConnectionResetError, OSError, RedisError) as error:
|
|
36
|
+
logger.warning("Health check failed: nonpersistent Redis ping raised %s", error)
|
|
37
|
+
return False
|
|
38
|
+
|
|
39
|
+
if redis_config.persistent.host:
|
|
40
|
+
try:
|
|
41
|
+
if not howler_config.redis_persistent.ping():
|
|
42
|
+
logger.warning("Health check failed: persistent Redis ping returned false")
|
|
43
|
+
return False
|
|
44
|
+
except (ConnectionResetError, OSError, RedisError) as error:
|
|
45
|
+
logger.warning("Health check failed: persistent Redis ping raised %s", error)
|
|
46
|
+
return False
|
|
47
|
+
|
|
48
|
+
return True
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@healthz.route("/live")
|
|
52
|
+
def liveness(**_):
|
|
53
|
+
"""Check if the API is live
|
|
54
|
+
|
|
55
|
+
Variables:
|
|
56
|
+
None
|
|
57
|
+
|
|
58
|
+
Arguments:
|
|
59
|
+
None
|
|
60
|
+
|
|
61
|
+
Result Example:
|
|
62
|
+
OK or FAIL
|
|
63
|
+
"""
|
|
64
|
+
return make_response("OK")
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
@healthz.route("/ready")
|
|
68
|
+
def readyness(**_):
|
|
69
|
+
"""Check if the API is Ready
|
|
70
|
+
|
|
71
|
+
Checks that the datastore and configured Redis connections are alive.
|
|
72
|
+
|
|
73
|
+
Variables:
|
|
74
|
+
None
|
|
75
|
+
|
|
76
|
+
Arguments:
|
|
77
|
+
None
|
|
78
|
+
|
|
79
|
+
Result Example:
|
|
80
|
+
OK or FAIL
|
|
81
|
+
"""
|
|
82
|
+
if _is_datastore_healthy() and _is_redis_healthy():
|
|
83
|
+
return make_response("OK")
|
|
84
|
+
else:
|
|
85
|
+
abort(503)
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
@healthz.errorhandler(503)
|
|
89
|
+
def error(_):
|
|
90
|
+
"Handle errors exposed in healthz routes"
|
|
91
|
+
return "FAIL", 503
|
|
@@ -152,7 +152,7 @@ suppress-none-returning = true
|
|
|
152
152
|
[tool.poetry]
|
|
153
153
|
package-mode = true
|
|
154
154
|
name = "howler-api"
|
|
155
|
-
version = "4.0.0.
|
|
155
|
+
version = "4.0.0.dev1038"
|
|
156
156
|
description = "Howler - API server"
|
|
157
157
|
authors = [
|
|
158
158
|
"Canadian Centre for Cyber Security <howler@cyber.gc.ca>",
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
from flask import Blueprint, abort, make_response
|
|
2
|
-
|
|
3
|
-
from howler.common.loader import datastore
|
|
4
|
-
|
|
5
|
-
API_PREFIX = "/api/healthz"
|
|
6
|
-
healthz = Blueprint("healthz", __name__, url_prefix=API_PREFIX)
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
@healthz.route("/live")
|
|
10
|
-
def liveness(**_):
|
|
11
|
-
"""Check if the API is live
|
|
12
|
-
|
|
13
|
-
Variables:
|
|
14
|
-
None
|
|
15
|
-
|
|
16
|
-
Arguments:
|
|
17
|
-
None
|
|
18
|
-
|
|
19
|
-
Result Example:
|
|
20
|
-
OK or FAIL
|
|
21
|
-
"""
|
|
22
|
-
return make_response("OK")
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
@healthz.route("/ready")
|
|
26
|
-
def readyness(**_):
|
|
27
|
-
"""Check if the API is Ready
|
|
28
|
-
|
|
29
|
-
Variables:
|
|
30
|
-
None
|
|
31
|
-
|
|
32
|
-
Arguments:
|
|
33
|
-
None
|
|
34
|
-
|
|
35
|
-
Result Example:
|
|
36
|
-
OK or FAIL
|
|
37
|
-
"""
|
|
38
|
-
if datastore().ds.ping():
|
|
39
|
-
return make_response("OK")
|
|
40
|
-
else:
|
|
41
|
-
abort(503)
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
@healthz.errorhandler(503)
|
|
45
|
-
def error(_):
|
|
46
|
-
"Handle errors exposed in healthz routes"
|
|
47
|
-
return "FAIL", 503
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/cronjobs/action_queue_worker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/datastore/migrations/fix_process.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/external/generate_sigma_rules.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/autonomous_system.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/code_signature.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/odm/models/ecs/vulnerability.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/__init__.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/comms.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/multi.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/named.py
RENAMED
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/queues/priority.py
RENAMED
|
File without changes
|
|
File without changes
|
{howler_api-4.0.0.dev1020 → howler_api-4.0.0.dev1038}/howler/remote/datatypes/user_quota_tracker.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|