404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@3.143.235.198: ~ $
import json
import urllib3

from sentry_sdk.integrations import Integration
from sentry_sdk.api import set_context
from sentry_sdk.utils import logger

from sentry_sdk._types import TYPE_CHECKING

if TYPE_CHECKING:
    from typing import Dict


CONTEXT_TYPE = "cloud_resource"

AWS_METADATA_HOST = "169.254.169.254"
AWS_TOKEN_URL = "http://{}/latest/api/token".format(AWS_METADATA_HOST)
AWS_METADATA_URL = "http://{}/latest/dynamic/instance-identity/document".format(
    AWS_METADATA_HOST
)

GCP_METADATA_HOST = "metadata.google.internal"
GCP_METADATA_URL = "http://{}/computeMetadata/v1/?recursive=true".format(
    GCP_METADATA_HOST
)


class CLOUD_PROVIDER:  # noqa: N801
    """
    Name of the cloud provider.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    """

    ALIBABA = "alibaba_cloud"
    AWS = "aws"
    AZURE = "azure"
    GCP = "gcp"
    IBM = "ibm_cloud"
    TENCENT = "tencent_cloud"


class CLOUD_PLATFORM:  # noqa: N801
    """
    The cloud platform.
    see https://opentelemetry.io/docs/reference/specification/resource/semantic_conventions/cloud/
    """

    AWS_EC2 = "aws_ec2"
    GCP_COMPUTE_ENGINE = "gcp_compute_engine"


class CloudResourceContextIntegration(Integration):
    """
    Adds cloud resource context to the Senty scope
    """

    identifier = "cloudresourcecontext"

    cloud_provider = ""

    aws_token = ""
    http = urllib3.PoolManager()

    gcp_metadata = None

    def __init__(self, cloud_provider=""):
        # type: (str) -> None
        CloudResourceContextIntegration.cloud_provider = cloud_provider

    @classmethod
    def _is_aws(cls):
        # type: () -> bool
        try:
            r = cls.http.request(
                "PUT",
                AWS_TOKEN_URL,
                headers={"X-aws-ec2-metadata-token-ttl-seconds": "60"},
            )

            if r.status != 200:
                return False

            cls.aws_token = r.data.decode()
            return True

        except Exception:
            return False

    @classmethod
    def _get_aws_context(cls):
        # type: () -> Dict[str, str]
        ctx = {
            "cloud.provider": CLOUD_PROVIDER.AWS,
            "cloud.platform": CLOUD_PLATFORM.AWS_EC2,
        }

        try:
            r = cls.http.request(
                "GET",
                AWS_METADATA_URL,
                headers={"X-aws-ec2-metadata-token": cls.aws_token},
            )

            if r.status != 200:
                return ctx

            data = json.loads(r.data.decode("utf-8"))

            try:
                ctx["cloud.account.id"] = data["accountId"]
            except Exception:
                pass

            try:
                ctx["cloud.availability_zone"] = data["availabilityZone"]
            except Exception:
                pass

            try:
                ctx["cloud.region"] = data["region"]
            except Exception:
                pass

            try:
                ctx["host.id"] = data["instanceId"]
            except Exception:
                pass

            try:
                ctx["host.type"] = data["instanceType"]
            except Exception:
                pass

        except Exception:
            pass

        return ctx

    @classmethod
    def _is_gcp(cls):
        # type: () -> bool
        try:
            r = cls.http.request(
                "GET",
                GCP_METADATA_URL,
                headers={"Metadata-Flavor": "Google"},
            )

            if r.status != 200:
                return False

            cls.gcp_metadata = json.loads(r.data.decode("utf-8"))
            return True

        except Exception:
            return False

    @classmethod
    def _get_gcp_context(cls):
        # type: () -> Dict[str, str]
        ctx = {
            "cloud.provider": CLOUD_PROVIDER.GCP,
            "cloud.platform": CLOUD_PLATFORM.GCP_COMPUTE_ENGINE,
        }

        try:
            if cls.gcp_metadata is None:
                r = cls.http.request(
                    "GET",
                    GCP_METADATA_URL,
                    headers={"Metadata-Flavor": "Google"},
                )

                if r.status != 200:
                    return ctx

                cls.gcp_metadata = json.loads(r.data.decode("utf-8"))

            try:
                ctx["cloud.account.id"] = cls.gcp_metadata["project"]["projectId"]
            except Exception:
                pass

            try:
                ctx["cloud.availability_zone"] = cls.gcp_metadata["instance"][
                    "zone"
                ].split("/")[-1]
            except Exception:
                pass

            try:
                # only populated in google cloud run
                ctx["cloud.region"] = cls.gcp_metadata["instance"]["region"].split("/")[
                    -1
                ]
            except Exception:
                pass

            try:
                ctx["host.id"] = cls.gcp_metadata["instance"]["id"]
            except Exception:
                pass

        except Exception:
            pass

        return ctx

    @classmethod
    def _get_cloud_provider(cls):
        # type: () -> str
        if cls._is_aws():
            return CLOUD_PROVIDER.AWS

        if cls._is_gcp():
            return CLOUD_PROVIDER.GCP

        return ""

    @classmethod
    def _get_cloud_resource_context(cls):
        # type: () -> Dict[str, str]
        cloud_provider = (
            cls.cloud_provider
            if cls.cloud_provider != ""
            else CloudResourceContextIntegration._get_cloud_provider()
        )
        if cloud_provider in context_getters.keys():
            return context_getters[cloud_provider]()

        return {}

    @staticmethod
    def setup_once():
        # type: () -> None
        cloud_provider = CloudResourceContextIntegration.cloud_provider
        unsupported_cloud_provider = (
            cloud_provider != "" and cloud_provider not in context_getters.keys()
        )

        if unsupported_cloud_provider:
            logger.warning(
                "Invalid value for cloud_provider: %s (must be in %s). Falling back to autodetection...",
                CloudResourceContextIntegration.cloud_provider,
                list(context_getters.keys()),
            )

        context = CloudResourceContextIntegration._get_cloud_resource_context()
        if context != {}:
            set_context(CONTEXT_TYPE, context)


# Map with the currently supported cloud providers
# mapping to functions extracting the context
context_getters = {
    CLOUD_PROVIDER.AWS: CloudResourceContextIntegration._get_aws_context,
    CLOUD_PROVIDER.GCP: CloudResourceContextIntegration._get_gcp_context,
}

Filemanager

Name Type Size Permission Actions
__pycache__ Folder 0755
django Folder 0755
grpc Folder 0755
opentelemetry Folder 0755
redis Folder 0755
spark Folder 0755
__init__.py File 6.67 KB 0644
_wsgi_common.py File 4.43 KB 0644
aiohttp.py File 11.28 KB 0644
argv.py File 963 B 0644
arq.py File 6.58 KB 0644
asgi.py File 11.54 KB 0644
asyncio.py File 2.98 KB 0644
atexit.py File 1.8 KB 0644
aws_lambda.py File 15.44 KB 0644
beam.py File 5.56 KB 0644
boto3.py File 4.44 KB 0644
bottle.py File 6.32 KB 0644
celery.py File 18.65 KB 0644
chalice.py File 4.66 KB 0644
cloud_resource_context.py File 6.6 KB 0644
dedupe.py File 1.16 KB 0644
excepthook.py File 2.21 KB 0644
executing.py File 1.99 KB 0644
falcon.py File 7.8 KB 0644
fastapi.py File 4.39 KB 0644
flask.py File 7.72 KB 0644
gcp.py File 8.02 KB 0644
gnu_backtrace.py File 2.86 KB 0644
httpx.py File 4.89 KB 0644
huey.py File 4.59 KB 0644
logging.py File 8.97 KB 0644
loguru.py File 2.98 KB 0644
modules.py File 2.06 KB 0644
pure_eval.py File 4.45 KB 0644
pymongo.py File 5.87 KB 0644
pyramid.py File 7.27 KB 0644
quart.py File 7.2 KB 0644
rq.py File 5.28 KB 0644
sanic.py File 11.06 KB 0644
serverless.py File 1.93 KB 0644
socket.py File 2.88 KB 0644
sqlalchemy.py File 4.14 KB 0644
starlette.py File 22.67 KB 0644
starlite.py File 9.85 KB 0644
stdlib.py File 8.06 KB 0644
threading.py File 2.87 KB 0644
tornado.py File 7.17 KB 0644
trytond.py File 1.7 KB 0644
wsgi.py File 9.36 KB 0644