paasta-tools 1.21.3__py3-none-any.whl
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.
- k8s_itests/__init__.py +0 -0
- k8s_itests/test_autoscaling.py +23 -0
- k8s_itests/utils.py +38 -0
- paasta_tools/__init__.py +20 -0
- paasta_tools/adhoc_tools.py +142 -0
- paasta_tools/api/__init__.py +13 -0
- paasta_tools/api/api.py +330 -0
- paasta_tools/api/api_docs/swagger.json +2323 -0
- paasta_tools/api/client.py +106 -0
- paasta_tools/api/settings.py +33 -0
- paasta_tools/api/tweens/__init__.py +6 -0
- paasta_tools/api/tweens/auth.py +125 -0
- paasta_tools/api/tweens/profiling.py +108 -0
- paasta_tools/api/tweens/request_logger.py +124 -0
- paasta_tools/api/views/__init__.py +13 -0
- paasta_tools/api/views/autoscaler.py +100 -0
- paasta_tools/api/views/exception.py +45 -0
- paasta_tools/api/views/flink.py +73 -0
- paasta_tools/api/views/instance.py +395 -0
- paasta_tools/api/views/pause_autoscaler.py +71 -0
- paasta_tools/api/views/remote_run.py +113 -0
- paasta_tools/api/views/resources.py +76 -0
- paasta_tools/api/views/service.py +35 -0
- paasta_tools/api/views/version.py +25 -0
- paasta_tools/apply_external_resources.py +79 -0
- paasta_tools/async_utils.py +109 -0
- paasta_tools/autoscaling/__init__.py +0 -0
- paasta_tools/autoscaling/autoscaling_service_lib.py +57 -0
- paasta_tools/autoscaling/forecasting.py +106 -0
- paasta_tools/autoscaling/max_all_k8s_services.py +41 -0
- paasta_tools/autoscaling/pause_service_autoscaler.py +77 -0
- paasta_tools/autoscaling/utils.py +52 -0
- paasta_tools/bounce_lib.py +184 -0
- paasta_tools/broadcast_log_to_services.py +62 -0
- paasta_tools/cassandracluster_tools.py +210 -0
- paasta_tools/check_autoscaler_max_instances.py +212 -0
- paasta_tools/check_cassandracluster_services_replication.py +35 -0
- paasta_tools/check_flink_services_health.py +203 -0
- paasta_tools/check_kubernetes_api.py +57 -0
- paasta_tools/check_kubernetes_services_replication.py +141 -0
- paasta_tools/check_oom_events.py +244 -0
- paasta_tools/check_services_replication_tools.py +324 -0
- paasta_tools/check_spark_jobs.py +234 -0
- paasta_tools/cleanup_kubernetes_cr.py +138 -0
- paasta_tools/cleanup_kubernetes_crd.py +145 -0
- paasta_tools/cleanup_kubernetes_jobs.py +344 -0
- paasta_tools/cleanup_tron_namespaces.py +96 -0
- paasta_tools/cli/__init__.py +13 -0
- paasta_tools/cli/authentication.py +85 -0
- paasta_tools/cli/cli.py +260 -0
- paasta_tools/cli/cmds/__init__.py +13 -0
- paasta_tools/cli/cmds/autoscale.py +143 -0
- paasta_tools/cli/cmds/check.py +334 -0
- paasta_tools/cli/cmds/cook_image.py +147 -0
- paasta_tools/cli/cmds/get_docker_image.py +76 -0
- paasta_tools/cli/cmds/get_image_version.py +172 -0
- paasta_tools/cli/cmds/get_latest_deployment.py +93 -0
- paasta_tools/cli/cmds/info.py +155 -0
- paasta_tools/cli/cmds/itest.py +117 -0
- paasta_tools/cli/cmds/list.py +66 -0
- paasta_tools/cli/cmds/list_clusters.py +42 -0
- paasta_tools/cli/cmds/list_deploy_queue.py +171 -0
- paasta_tools/cli/cmds/list_namespaces.py +84 -0
- paasta_tools/cli/cmds/local_run.py +1396 -0
- paasta_tools/cli/cmds/logs.py +1601 -0
- paasta_tools/cli/cmds/mark_for_deployment.py +1988 -0
- paasta_tools/cli/cmds/mesh_status.py +174 -0
- paasta_tools/cli/cmds/pause_service_autoscaler.py +107 -0
- paasta_tools/cli/cmds/push_to_registry.py +275 -0
- paasta_tools/cli/cmds/remote_run.py +252 -0
- paasta_tools/cli/cmds/rollback.py +347 -0
- paasta_tools/cli/cmds/secret.py +549 -0
- paasta_tools/cli/cmds/security_check.py +59 -0
- paasta_tools/cli/cmds/spark_run.py +1400 -0
- paasta_tools/cli/cmds/start_stop_restart.py +401 -0
- paasta_tools/cli/cmds/status.py +2302 -0
- paasta_tools/cli/cmds/validate.py +1012 -0
- paasta_tools/cli/cmds/wait_for_deployment.py +275 -0
- paasta_tools/cli/fsm/__init__.py +13 -0
- paasta_tools/cli/fsm/autosuggest.py +82 -0
- paasta_tools/cli/fsm/template/README.md +8 -0
- paasta_tools/cli/fsm/template/cookiecutter.json +7 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/kubernetes-PROD.yaml +91 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/monitoring.yaml +20 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/service.yaml +8 -0
- paasta_tools/cli/fsm/template/{{cookiecutter.service}}/smartstack.yaml +6 -0
- paasta_tools/cli/fsm_cmd.py +121 -0
- paasta_tools/cli/paasta_tabcomplete.sh +23 -0
- paasta_tools/cli/schemas/adhoc_schema.json +199 -0
- paasta_tools/cli/schemas/autoscaling_schema.json +91 -0
- paasta_tools/cli/schemas/autotuned_defaults/cassandracluster_schema.json +37 -0
- paasta_tools/cli/schemas/autotuned_defaults/kubernetes_schema.json +89 -0
- paasta_tools/cli/schemas/deploy_schema.json +173 -0
- paasta_tools/cli/schemas/eks_schema.json +970 -0
- paasta_tools/cli/schemas/kubernetes_schema.json +970 -0
- paasta_tools/cli/schemas/rollback_schema.json +160 -0
- paasta_tools/cli/schemas/service_schema.json +25 -0
- paasta_tools/cli/schemas/smartstack_schema.json +322 -0
- paasta_tools/cli/schemas/tron_schema.json +699 -0
- paasta_tools/cli/utils.py +1118 -0
- paasta_tools/clusterman.py +21 -0
- paasta_tools/config_utils.py +385 -0
- paasta_tools/contrib/__init__.py +0 -0
- paasta_tools/contrib/bounce_log_latency_parser.py +68 -0
- paasta_tools/contrib/check_manual_oapi_changes.sh +24 -0
- paasta_tools/contrib/check_orphans.py +306 -0
- paasta_tools/contrib/create_dynamodb_table.py +35 -0
- paasta_tools/contrib/create_paasta_playground.py +105 -0
- paasta_tools/contrib/emit_allocated_cpu_metrics.py +50 -0
- paasta_tools/contrib/get_running_task_allocation.py +346 -0
- paasta_tools/contrib/habitat_fixer.py +86 -0
- paasta_tools/contrib/ide_helper.py +316 -0
- paasta_tools/contrib/is_pod_healthy_in_proxy.py +139 -0
- paasta_tools/contrib/is_pod_healthy_in_smartstack.py +50 -0
- paasta_tools/contrib/kill_bad_containers.py +109 -0
- paasta_tools/contrib/mass-deploy-tag.sh +44 -0
- paasta_tools/contrib/mock_patch_checker.py +86 -0
- paasta_tools/contrib/paasta_update_soa_memcpu.py +520 -0
- paasta_tools/contrib/render_template.py +129 -0
- paasta_tools/contrib/rightsizer_soaconfigs_update.py +348 -0
- paasta_tools/contrib/service_shard_remove.py +157 -0
- paasta_tools/contrib/service_shard_update.py +373 -0
- paasta_tools/contrib/shared_ip_check.py +77 -0
- paasta_tools/contrib/timeouts_metrics_prom.py +64 -0
- paasta_tools/delete_kubernetes_deployments.py +89 -0
- paasta_tools/deployment_utils.py +44 -0
- paasta_tools/docker_wrapper.py +234 -0
- paasta_tools/docker_wrapper_imports.py +13 -0
- paasta_tools/drain_lib.py +351 -0
- paasta_tools/dump_locally_running_services.py +71 -0
- paasta_tools/eks_tools.py +119 -0
- paasta_tools/envoy_tools.py +373 -0
- paasta_tools/firewall.py +504 -0
- paasta_tools/firewall_logging.py +154 -0
- paasta_tools/firewall_update.py +172 -0
- paasta_tools/flink_tools.py +345 -0
- paasta_tools/flinkeks_tools.py +90 -0
- paasta_tools/frameworks/__init__.py +0 -0
- paasta_tools/frameworks/adhoc_scheduler.py +71 -0
- paasta_tools/frameworks/constraints.py +87 -0
- paasta_tools/frameworks/native_scheduler.py +652 -0
- paasta_tools/frameworks/native_service_config.py +301 -0
- paasta_tools/frameworks/task_store.py +245 -0
- paasta_tools/generate_all_deployments +9 -0
- paasta_tools/generate_authenticating_services.py +94 -0
- paasta_tools/generate_deployments_for_service.py +255 -0
- paasta_tools/generate_services_file.py +114 -0
- paasta_tools/generate_services_yaml.py +30 -0
- paasta_tools/hacheck.py +76 -0
- paasta_tools/instance/__init__.py +0 -0
- paasta_tools/instance/hpa_metrics_parser.py +122 -0
- paasta_tools/instance/kubernetes.py +1362 -0
- paasta_tools/iptables.py +240 -0
- paasta_tools/kafkacluster_tools.py +143 -0
- paasta_tools/kubernetes/__init__.py +0 -0
- paasta_tools/kubernetes/application/__init__.py +0 -0
- paasta_tools/kubernetes/application/controller_wrappers.py +476 -0
- paasta_tools/kubernetes/application/tools.py +90 -0
- paasta_tools/kubernetes/bin/__init__.py +0 -0
- paasta_tools/kubernetes/bin/kubernetes_remove_evicted_pods.py +164 -0
- paasta_tools/kubernetes/bin/paasta_cleanup_remote_run_resources.py +135 -0
- paasta_tools/kubernetes/bin/paasta_cleanup_stale_nodes.py +181 -0
- paasta_tools/kubernetes/bin/paasta_secrets_sync.py +758 -0
- paasta_tools/kubernetes/remote_run.py +558 -0
- paasta_tools/kubernetes_tools.py +4679 -0
- paasta_tools/list_kubernetes_service_instances.py +128 -0
- paasta_tools/list_tron_namespaces.py +60 -0
- paasta_tools/long_running_service_tools.py +678 -0
- paasta_tools/mac_address.py +44 -0
- paasta_tools/marathon_dashboard.py +0 -0
- paasta_tools/mesos/__init__.py +0 -0
- paasta_tools/mesos/cfg.py +46 -0
- paasta_tools/mesos/cluster.py +60 -0
- paasta_tools/mesos/exceptions.py +59 -0
- paasta_tools/mesos/framework.py +77 -0
- paasta_tools/mesos/log.py +48 -0
- paasta_tools/mesos/master.py +306 -0
- paasta_tools/mesos/mesos_file.py +169 -0
- paasta_tools/mesos/parallel.py +52 -0
- paasta_tools/mesos/slave.py +115 -0
- paasta_tools/mesos/task.py +94 -0
- paasta_tools/mesos/util.py +69 -0
- paasta_tools/mesos/zookeeper.py +37 -0
- paasta_tools/mesos_maintenance.py +848 -0
- paasta_tools/mesos_tools.py +1051 -0
- paasta_tools/metrics/__init__.py +0 -0
- paasta_tools/metrics/metastatus_lib.py +1110 -0
- paasta_tools/metrics/metrics_lib.py +217 -0
- paasta_tools/monitoring/__init__.py +13 -0
- paasta_tools/monitoring/check_k8s_api_performance.py +110 -0
- paasta_tools/monitoring_tools.py +652 -0
- paasta_tools/monkrelaycluster_tools.py +146 -0
- paasta_tools/nrtsearchservice_tools.py +143 -0
- paasta_tools/nrtsearchserviceeks_tools.py +68 -0
- paasta_tools/oom_logger.py +321 -0
- paasta_tools/paasta_deploy_tron_jobs +3 -0
- paasta_tools/paasta_execute_docker_command.py +123 -0
- paasta_tools/paasta_native_serviceinit.py +21 -0
- paasta_tools/paasta_service_config_loader.py +201 -0
- paasta_tools/paastaapi/__init__.py +29 -0
- paasta_tools/paastaapi/api/__init__.py +3 -0
- paasta_tools/paastaapi/api/autoscaler_api.py +302 -0
- paasta_tools/paastaapi/api/default_api.py +569 -0
- paasta_tools/paastaapi/api/remote_run_api.py +604 -0
- paasta_tools/paastaapi/api/resources_api.py +157 -0
- paasta_tools/paastaapi/api/service_api.py +1736 -0
- paasta_tools/paastaapi/api_client.py +818 -0
- paasta_tools/paastaapi/apis/__init__.py +22 -0
- paasta_tools/paastaapi/configuration.py +455 -0
- paasta_tools/paastaapi/exceptions.py +137 -0
- paasta_tools/paastaapi/model/__init__.py +5 -0
- paasta_tools/paastaapi/model/adhoc_launch_history.py +176 -0
- paasta_tools/paastaapi/model/autoscaler_count_msg.py +176 -0
- paasta_tools/paastaapi/model/deploy_queue.py +178 -0
- paasta_tools/paastaapi/model/deploy_queue_service_instance.py +194 -0
- paasta_tools/paastaapi/model/envoy_backend.py +185 -0
- paasta_tools/paastaapi/model/envoy_location.py +184 -0
- paasta_tools/paastaapi/model/envoy_status.py +181 -0
- paasta_tools/paastaapi/model/flink_cluster_overview.py +188 -0
- paasta_tools/paastaapi/model/flink_config.py +173 -0
- paasta_tools/paastaapi/model/flink_job.py +186 -0
- paasta_tools/paastaapi/model/flink_job_details.py +192 -0
- paasta_tools/paastaapi/model/flink_jobs.py +175 -0
- paasta_tools/paastaapi/model/float_and_error.py +173 -0
- paasta_tools/paastaapi/model/hpa_metric.py +176 -0
- paasta_tools/paastaapi/model/inline_object.py +170 -0
- paasta_tools/paastaapi/model/inline_response200.py +170 -0
- paasta_tools/paastaapi/model/inline_response2001.py +170 -0
- paasta_tools/paastaapi/model/instance_bounce_status.py +200 -0
- paasta_tools/paastaapi/model/instance_mesh_status.py +186 -0
- paasta_tools/paastaapi/model/instance_status.py +220 -0
- paasta_tools/paastaapi/model/instance_status_adhoc.py +187 -0
- paasta_tools/paastaapi/model/instance_status_cassandracluster.py +173 -0
- paasta_tools/paastaapi/model/instance_status_flink.py +173 -0
- paasta_tools/paastaapi/model/instance_status_kafkacluster.py +173 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes.py +263 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes_autoscaling_status.py +187 -0
- paasta_tools/paastaapi/model/instance_status_kubernetes_v2.py +197 -0
- paasta_tools/paastaapi/model/instance_status_tron.py +204 -0
- paasta_tools/paastaapi/model/instance_tasks.py +182 -0
- paasta_tools/paastaapi/model/integer_and_error.py +173 -0
- paasta_tools/paastaapi/model/kubernetes_container.py +178 -0
- paasta_tools/paastaapi/model/kubernetes_container_v2.py +219 -0
- paasta_tools/paastaapi/model/kubernetes_healthcheck.py +176 -0
- paasta_tools/paastaapi/model/kubernetes_pod.py +201 -0
- paasta_tools/paastaapi/model/kubernetes_pod_event.py +176 -0
- paasta_tools/paastaapi/model/kubernetes_pod_v2.py +213 -0
- paasta_tools/paastaapi/model/kubernetes_replica_set.py +185 -0
- paasta_tools/paastaapi/model/kubernetes_version.py +202 -0
- paasta_tools/paastaapi/model/remote_run_outcome.py +189 -0
- paasta_tools/paastaapi/model/remote_run_start.py +185 -0
- paasta_tools/paastaapi/model/remote_run_stop.py +176 -0
- paasta_tools/paastaapi/model/remote_run_token.py +173 -0
- paasta_tools/paastaapi/model/resource.py +187 -0
- paasta_tools/paastaapi/model/resource_item.py +187 -0
- paasta_tools/paastaapi/model/resource_value.py +176 -0
- paasta_tools/paastaapi/model/smartstack_backend.py +191 -0
- paasta_tools/paastaapi/model/smartstack_location.py +181 -0
- paasta_tools/paastaapi/model/smartstack_status.py +181 -0
- paasta_tools/paastaapi/model/task_tail_lines.py +176 -0
- paasta_tools/paastaapi/model_utils.py +1879 -0
- paasta_tools/paastaapi/models/__init__.py +62 -0
- paasta_tools/paastaapi/rest.py +287 -0
- paasta_tools/prune_completed_pods.py +220 -0
- paasta_tools/puppet_service_tools.py +59 -0
- paasta_tools/py.typed +1 -0
- paasta_tools/remote_git.py +127 -0
- paasta_tools/run-paasta-api-in-dev-mode.py +57 -0
- paasta_tools/run-paasta-api-playground.py +51 -0
- paasta_tools/secret_providers/__init__.py +66 -0
- paasta_tools/secret_providers/vault.py +214 -0
- paasta_tools/secret_tools.py +277 -0
- paasta_tools/setup_istio_mesh.py +353 -0
- paasta_tools/setup_kubernetes_cr.py +412 -0
- paasta_tools/setup_kubernetes_crd.py +138 -0
- paasta_tools/setup_kubernetes_internal_crd.py +154 -0
- paasta_tools/setup_kubernetes_job.py +353 -0
- paasta_tools/setup_prometheus_adapter_config.py +1028 -0
- paasta_tools/setup_tron_namespace.py +248 -0
- paasta_tools/slack.py +75 -0
- paasta_tools/smartstack_tools.py +676 -0
- paasta_tools/spark_tools.py +283 -0
- paasta_tools/synapse_srv_namespaces_fact.py +42 -0
- paasta_tools/tron/__init__.py +0 -0
- paasta_tools/tron/client.py +158 -0
- paasta_tools/tron/tron_command_context.py +194 -0
- paasta_tools/tron/tron_timeutils.py +101 -0
- paasta_tools/tron_tools.py +1448 -0
- paasta_tools/utils.py +4307 -0
- paasta_tools/yaml_tools.py +44 -0
- paasta_tools-1.21.3.data/scripts/apply_external_resources.py +79 -0
- paasta_tools-1.21.3.data/scripts/bounce_log_latency_parser.py +68 -0
- paasta_tools-1.21.3.data/scripts/check_autoscaler_max_instances.py +212 -0
- paasta_tools-1.21.3.data/scripts/check_cassandracluster_services_replication.py +35 -0
- paasta_tools-1.21.3.data/scripts/check_flink_services_health.py +203 -0
- paasta_tools-1.21.3.data/scripts/check_kubernetes_api.py +57 -0
- paasta_tools-1.21.3.data/scripts/check_kubernetes_services_replication.py +141 -0
- paasta_tools-1.21.3.data/scripts/check_manual_oapi_changes.sh +24 -0
- paasta_tools-1.21.3.data/scripts/check_oom_events.py +244 -0
- paasta_tools-1.21.3.data/scripts/check_orphans.py +306 -0
- paasta_tools-1.21.3.data/scripts/check_spark_jobs.py +234 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_cr.py +138 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_crd.py +145 -0
- paasta_tools-1.21.3.data/scripts/cleanup_kubernetes_jobs.py +344 -0
- paasta_tools-1.21.3.data/scripts/create_dynamodb_table.py +35 -0
- paasta_tools-1.21.3.data/scripts/create_paasta_playground.py +105 -0
- paasta_tools-1.21.3.data/scripts/delete_kubernetes_deployments.py +89 -0
- paasta_tools-1.21.3.data/scripts/emit_allocated_cpu_metrics.py +50 -0
- paasta_tools-1.21.3.data/scripts/generate_all_deployments +9 -0
- paasta_tools-1.21.3.data/scripts/generate_authenticating_services.py +94 -0
- paasta_tools-1.21.3.data/scripts/generate_deployments_for_service.py +255 -0
- paasta_tools-1.21.3.data/scripts/generate_services_file.py +114 -0
- paasta_tools-1.21.3.data/scripts/generate_services_yaml.py +30 -0
- paasta_tools-1.21.3.data/scripts/get_running_task_allocation.py +346 -0
- paasta_tools-1.21.3.data/scripts/habitat_fixer.py +86 -0
- paasta_tools-1.21.3.data/scripts/ide_helper.py +316 -0
- paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_proxy.py +139 -0
- paasta_tools-1.21.3.data/scripts/is_pod_healthy_in_smartstack.py +50 -0
- paasta_tools-1.21.3.data/scripts/kill_bad_containers.py +109 -0
- paasta_tools-1.21.3.data/scripts/kubernetes_remove_evicted_pods.py +164 -0
- paasta_tools-1.21.3.data/scripts/mass-deploy-tag.sh +44 -0
- paasta_tools-1.21.3.data/scripts/mock_patch_checker.py +86 -0
- paasta_tools-1.21.3.data/scripts/paasta_cleanup_remote_run_resources.py +135 -0
- paasta_tools-1.21.3.data/scripts/paasta_cleanup_stale_nodes.py +181 -0
- paasta_tools-1.21.3.data/scripts/paasta_deploy_tron_jobs +3 -0
- paasta_tools-1.21.3.data/scripts/paasta_execute_docker_command.py +123 -0
- paasta_tools-1.21.3.data/scripts/paasta_secrets_sync.py +758 -0
- paasta_tools-1.21.3.data/scripts/paasta_tabcomplete.sh +23 -0
- paasta_tools-1.21.3.data/scripts/paasta_update_soa_memcpu.py +520 -0
- paasta_tools-1.21.3.data/scripts/render_template.py +129 -0
- paasta_tools-1.21.3.data/scripts/rightsizer_soaconfigs_update.py +348 -0
- paasta_tools-1.21.3.data/scripts/service_shard_remove.py +157 -0
- paasta_tools-1.21.3.data/scripts/service_shard_update.py +373 -0
- paasta_tools-1.21.3.data/scripts/setup_istio_mesh.py +353 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_cr.py +412 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_crd.py +138 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_internal_crd.py +154 -0
- paasta_tools-1.21.3.data/scripts/setup_kubernetes_job.py +353 -0
- paasta_tools-1.21.3.data/scripts/setup_prometheus_adapter_config.py +1028 -0
- paasta_tools-1.21.3.data/scripts/shared_ip_check.py +77 -0
- paasta_tools-1.21.3.data/scripts/synapse_srv_namespaces_fact.py +42 -0
- paasta_tools-1.21.3.data/scripts/timeouts_metrics_prom.py +64 -0
- paasta_tools-1.21.3.dist-info/LICENSE +201 -0
- paasta_tools-1.21.3.dist-info/METADATA +74 -0
- paasta_tools-1.21.3.dist-info/RECORD +348 -0
- paasta_tools-1.21.3.dist-info/WHEEL +5 -0
- paasta_tools-1.21.3.dist-info/entry_points.txt +20 -0
- paasta_tools-1.21.3.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import socket
|
|
4
|
+
import time
|
|
5
|
+
from abc import ABC
|
|
6
|
+
from abc import abstractmethod
|
|
7
|
+
from inspect import currentframe
|
|
8
|
+
from types import TracebackType
|
|
9
|
+
from typing import Any
|
|
10
|
+
from typing import Callable
|
|
11
|
+
from typing import Dict
|
|
12
|
+
from typing import Optional
|
|
13
|
+
from typing import Type
|
|
14
|
+
from typing import Union
|
|
15
|
+
|
|
16
|
+
from typing_extensions import Protocol
|
|
17
|
+
|
|
18
|
+
from paasta_tools.utils import load_system_paasta_config
|
|
19
|
+
|
|
20
|
+
log = logging.getLogger(__name__)
|
|
21
|
+
|
|
22
|
+
try:
|
|
23
|
+
import yelp_meteorite
|
|
24
|
+
except ImportError:
|
|
25
|
+
yelp_meteorite = None
|
|
26
|
+
|
|
27
|
+
_metrics_interfaces: Dict[str, Type["BaseMetrics"]] = {}
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class TimerProtocol(Protocol):
|
|
31
|
+
def __enter__(self) -> "TimerProtocol":
|
|
32
|
+
raise NotImplementedError()
|
|
33
|
+
|
|
34
|
+
def __exit__(
|
|
35
|
+
self,
|
|
36
|
+
err_type: Optional[type],
|
|
37
|
+
value: Optional[BaseException],
|
|
38
|
+
traceback: Optional[TracebackType],
|
|
39
|
+
) -> None:
|
|
40
|
+
raise NotImplementedError()
|
|
41
|
+
|
|
42
|
+
def __call__(
|
|
43
|
+
self,
|
|
44
|
+
) -> Optional[float]:
|
|
45
|
+
raise NotImplementedError()
|
|
46
|
+
|
|
47
|
+
def start(self) -> None:
|
|
48
|
+
raise NotImplementedError()
|
|
49
|
+
|
|
50
|
+
def stop(self, **kwargs: Any) -> None:
|
|
51
|
+
raise NotImplementedError()
|
|
52
|
+
|
|
53
|
+
def record(self, value: float, **kwargs: Any) -> None:
|
|
54
|
+
raise NotImplementedError()
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
class GaugeProtocol(Protocol):
|
|
58
|
+
def set(self, value: Union[int, float]) -> None:
|
|
59
|
+
raise NotImplementedError()
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class CounterProtocol(Protocol):
|
|
63
|
+
def count(self) -> None:
|
|
64
|
+
raise NotImplementedError()
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
class BaseMetrics(ABC):
|
|
68
|
+
def __init__(self, base_name: str) -> None:
|
|
69
|
+
self.base_name = base_name
|
|
70
|
+
|
|
71
|
+
@abstractmethod
|
|
72
|
+
def create_timer(self, name: str, **kwargs: Any) -> TimerProtocol:
|
|
73
|
+
raise NotImplementedError()
|
|
74
|
+
|
|
75
|
+
@abstractmethod
|
|
76
|
+
def create_gauge(self, name: str, **kwargs: Any) -> GaugeProtocol:
|
|
77
|
+
raise NotImplementedError()
|
|
78
|
+
|
|
79
|
+
@abstractmethod
|
|
80
|
+
def create_counter(self, name: str, **kwargs: Any) -> CounterProtocol:
|
|
81
|
+
raise NotImplementedError()
|
|
82
|
+
|
|
83
|
+
@abstractmethod
|
|
84
|
+
def emit_event(self, name: str, **kwargs: Any) -> bool:
|
|
85
|
+
raise NotImplementedError()
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def get_metrics_interface(base_name: str) -> BaseMetrics:
|
|
89
|
+
metrics_provider = load_system_paasta_config().get_metrics_provider()
|
|
90
|
+
return _metrics_interfaces[metrics_provider](base_name)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def register_metrics_interface(
|
|
94
|
+
name: Optional[str],
|
|
95
|
+
) -> Callable[[Type[BaseMetrics]], Type[BaseMetrics]]:
|
|
96
|
+
def outer(func: Type[BaseMetrics]) -> Type[BaseMetrics]:
|
|
97
|
+
_metrics_interfaces[name] = func
|
|
98
|
+
return func
|
|
99
|
+
|
|
100
|
+
return outer
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@register_metrics_interface("meteorite")
|
|
104
|
+
class MeteoriteMetrics(BaseMetrics):
|
|
105
|
+
def __init__(self, base_name: str) -> None:
|
|
106
|
+
self.base_name = base_name
|
|
107
|
+
if yelp_meteorite is None:
|
|
108
|
+
raise ImportError(
|
|
109
|
+
"yelp_meteorite not imported, please try another metrics provider"
|
|
110
|
+
)
|
|
111
|
+
|
|
112
|
+
def create_timer(self, name: str, **kwargs: Any) -> TimerProtocol:
|
|
113
|
+
return yelp_meteorite.create_timer(self.base_name + "." + name, **kwargs)
|
|
114
|
+
|
|
115
|
+
def create_gauge(self, name: str, **kwargs: Any) -> GaugeProtocol:
|
|
116
|
+
return yelp_meteorite.create_gauge(self.base_name + "." + name, **kwargs)
|
|
117
|
+
|
|
118
|
+
def create_counter(self, name: str, **kwargs: Any) -> CounterProtocol:
|
|
119
|
+
return yelp_meteorite.create_counter(self.base_name + "." + name, **kwargs)
|
|
120
|
+
|
|
121
|
+
def emit_event(self, name: str, **kwargs: Any) -> bool:
|
|
122
|
+
return yelp_meteorite.emit_event(self.base_name + "." + name, **kwargs)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
class Timer(TimerProtocol):
|
|
126
|
+
def __init__(self, name: str) -> None:
|
|
127
|
+
self.name = name
|
|
128
|
+
self.elapsed_ms: Optional[float] = None
|
|
129
|
+
|
|
130
|
+
def __enter__(self) -> TimerProtocol:
|
|
131
|
+
self.start()
|
|
132
|
+
return self
|
|
133
|
+
|
|
134
|
+
def __exit__(
|
|
135
|
+
self,
|
|
136
|
+
err_type: Optional[type],
|
|
137
|
+
value: Optional[BaseException],
|
|
138
|
+
traceback: Optional[TracebackType],
|
|
139
|
+
) -> None:
|
|
140
|
+
if not err_type:
|
|
141
|
+
self.stop()
|
|
142
|
+
|
|
143
|
+
def __call__(self) -> Optional[float]:
|
|
144
|
+
if self.elapsed_ms is None:
|
|
145
|
+
self.stop()
|
|
146
|
+
return self.elapsed_ms
|
|
147
|
+
|
|
148
|
+
def start(self) -> None:
|
|
149
|
+
log.debug("timer {} start at {}".format(self.name, time.time()))
|
|
150
|
+
|
|
151
|
+
def stop(self, **kwargs: Any) -> None:
|
|
152
|
+
log.debug("timer {} stop at {}".format(self.name, time.time()))
|
|
153
|
+
|
|
154
|
+
def record(self, value: float, **kwargs: Any) -> None:
|
|
155
|
+
log.debug(f"timer {self.name} record value {value}")
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
class Gauge(GaugeProtocol):
|
|
159
|
+
def __init__(self, name: str) -> None:
|
|
160
|
+
self.name = name
|
|
161
|
+
|
|
162
|
+
def set(self, value: Union[int, float]) -> None:
|
|
163
|
+
log.debug(f"gauge {self.name} set to {value}")
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
class Counter(GaugeProtocol):
|
|
167
|
+
def __init__(self, name: str) -> None:
|
|
168
|
+
self.name = name
|
|
169
|
+
self.counter = 0
|
|
170
|
+
|
|
171
|
+
def count(self) -> None:
|
|
172
|
+
self.counter += 1
|
|
173
|
+
log.debug(f"counter {self.name} incremented to {self.counter}")
|
|
174
|
+
|
|
175
|
+
|
|
176
|
+
@register_metrics_interface(None)
|
|
177
|
+
class NoMetrics(BaseMetrics):
|
|
178
|
+
def __init__(self, base_name: str) -> None:
|
|
179
|
+
self.base_name = base_name
|
|
180
|
+
|
|
181
|
+
def create_timer(self, name: str, **kwargs: Any) -> Timer:
|
|
182
|
+
return Timer(self.base_name + "." + name)
|
|
183
|
+
|
|
184
|
+
def create_gauge(self, name: str, **kwargs: Any) -> Gauge:
|
|
185
|
+
return Gauge(self.base_name + "." + name)
|
|
186
|
+
|
|
187
|
+
def create_counter(self, name: str, **kwargs: Any) -> Counter:
|
|
188
|
+
return Counter(self.base_name + "." + name)
|
|
189
|
+
|
|
190
|
+
def emit_event(self, name: str, **kwargs: Any) -> bool:
|
|
191
|
+
log.debug(f"event {name} occurred with properties: {kwargs}")
|
|
192
|
+
return True
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def system_timer(
|
|
196
|
+
name: str = "system_process_duration", dimensions: Dict[str, Any] = {}
|
|
197
|
+
) -> TimerProtocol:
|
|
198
|
+
metrics_interface = get_metrics_interface("paasta")
|
|
199
|
+
parent_pid = os.getppid()
|
|
200
|
+
pid = os.getpid()
|
|
201
|
+
hostname = socket.gethostname()
|
|
202
|
+
# set our parent caller as the path dimension, e.g. /path/to/setup_kubernetes_job
|
|
203
|
+
current = currentframe()
|
|
204
|
+
parent = current.f_back
|
|
205
|
+
path = parent.f_globals.get("__file__", "unknown")
|
|
206
|
+
# Note any of these dimensions may be overridden by caller
|
|
207
|
+
default_dimensions = {
|
|
208
|
+
"path": path,
|
|
209
|
+
"host": hostname,
|
|
210
|
+
# ppid is included given some system processes are called multiple times in parallel for a single 'run'
|
|
211
|
+
"parent_pid": parent_pid,
|
|
212
|
+
"pid": pid,
|
|
213
|
+
}
|
|
214
|
+
default_dimensions.update(dimensions)
|
|
215
|
+
return metrics_interface.create_timer(
|
|
216
|
+
name=name, default_dimensions=default_dimensions
|
|
217
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
# Copyright 2015-2016 Yelp Inc.
|
|
3
|
+
#
|
|
4
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
# you may not use this file except in compliance with the License.
|
|
6
|
+
# You may obtain a copy of the License at
|
|
7
|
+
#
|
|
8
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
#
|
|
10
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
# See the License for the specific language governing permissions and
|
|
14
|
+
# limitations under the License.
|
|
15
|
+
import argparse
|
|
16
|
+
import time
|
|
17
|
+
|
|
18
|
+
from kubernetes import client
|
|
19
|
+
|
|
20
|
+
from paasta_tools.kubernetes_tools import KUBE_CONFIG_USER_PATH
|
|
21
|
+
from paasta_tools.kubernetes_tools import KubeClient
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
NAMESPACE = "paasta"
|
|
25
|
+
LABEL_SELECTOR = None
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def parse_k8s_api_performance_options() -> argparse.Namespace:
|
|
29
|
+
parser = argparse.ArgumentParser(
|
|
30
|
+
formatter_class=argparse.ArgumentDefaultsHelpFormatter
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
parser.add_argument(
|
|
34
|
+
"--kube-config-path",
|
|
35
|
+
"-k",
|
|
36
|
+
dest="kube_config_path",
|
|
37
|
+
default=KUBE_CONFIG_USER_PATH,
|
|
38
|
+
help="Specify the path to the kubeconfig file",
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
parser.add_argument(
|
|
42
|
+
"--context",
|
|
43
|
+
"-c",
|
|
44
|
+
dest="context",
|
|
45
|
+
default=None,
|
|
46
|
+
help="Pass the cluster you want to connect to",
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
parser.add_argument(
|
|
50
|
+
"--namespace",
|
|
51
|
+
"-n",
|
|
52
|
+
dest="namespace",
|
|
53
|
+
default=NAMESPACE,
|
|
54
|
+
help="Pass the namespace you want to query",
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
parser.add_argument(
|
|
58
|
+
"--label-selector",
|
|
59
|
+
"-l",
|
|
60
|
+
dest="label_selector",
|
|
61
|
+
default=LABEL_SELECTOR,
|
|
62
|
+
help="Pass the label selector you want to select",
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
options = parser.parse_args()
|
|
66
|
+
return options
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_pods_from_namespace(
|
|
70
|
+
kube_client: KubeClient, namespace: str
|
|
71
|
+
) -> client.models.v1_pod_list.V1PodList:
|
|
72
|
+
|
|
73
|
+
# list all the running pods
|
|
74
|
+
ret = kube_client.core.list_namespaced_pod(namespace, watch=False)
|
|
75
|
+
return ret
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def get_pods_from_namespace_selector(
|
|
79
|
+
kube_client: KubeClient, namespace: str, label_selector: str
|
|
80
|
+
) -> client.models.v1_pod_list.V1PodList:
|
|
81
|
+
|
|
82
|
+
# list all the running pods
|
|
83
|
+
ret = kube_client.core.list_namespaced_pod(
|
|
84
|
+
namespace, watch=False, label_selector=label_selector
|
|
85
|
+
)
|
|
86
|
+
return ret
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
if __name__ == "__main__":
|
|
90
|
+
|
|
91
|
+
options = parse_k8s_api_performance_options()
|
|
92
|
+
kube_client = KubeClient(
|
|
93
|
+
config_file=options.kube_config_path, context=options.context
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
# measure the performance of this function
|
|
97
|
+
start = time.time()
|
|
98
|
+
ret = get_pods_from_namespace_selector(
|
|
99
|
+
kube_client, options.namespace, options.label_selector
|
|
100
|
+
)
|
|
101
|
+
end = time.time()
|
|
102
|
+
|
|
103
|
+
print("time it took to run this function: ", end - start)
|
|
104
|
+
|
|
105
|
+
# pods are stored here
|
|
106
|
+
pods = ret.items
|
|
107
|
+
pods_names = [pod.metadata.name for pod in pods]
|
|
108
|
+
pods_status = [pod.status.phase for pod in pods]
|
|
109
|
+
|
|
110
|
+
print(list(zip(pods_names, pods_status)))
|