[go: up one dir, main page]

Skip to content

Include upload_duration in finalized fields

What does this MR do and why?

This is Step 1 and 2 of #340961 (comment 689110800)

This new upload_duration field will be used by Rails for logging.

This MR also adds a new Grape logger to for uploads.

Sample API JSON log entry with this new field included (tested locally with GDK)

See the following new attributes in this sample log entry from api_json.log, tested with an actual artifact upload on GDK:

    "uploaded_file_upload_duration_s": 0.408988117,
    "uploaded_file_size_bytes": 214,
Click this to collapse/fold.
{
    "time": "2021-10-21T17:28:15.642Z",
    "severity": "INFO",
    "duration_s": 0.21631,
    "db_duration_s": 0.0481,
    "view_duration_s": 0.16821,
    "status": 201,
    "method": "POST",
    "path": "/api/v4/jobs/807/artifacts",
    "params": [
        {
            "key": "artifact_format",
            "value": "zip"
        },
        {
            "key": "artifact_type",
            "value": "archive"
        },
        {
            "key": "file.remote_id",
            "value": "1634837293-51536-0001-4763-e05fbdc203ca5a39c691551ac89a3aa7"
        },
        {
            "key": "file.name",
            "value": "artifacts.zip"
        },
        {
            "key": "file.sha512",
            "value": "5ea23d728101c95bc3d27c66c77cf923901b9b8468f322161dfc83e83c06dc7fdb73fe400e11a4225a40fd199f03a388d080814ab7a6640faaf53e6482f17b73"
        },
        {
            "key": "file.md5",
            "value": "c99f6dc294aa68c3dc3db7c6d47b3500"
        },
        {
            "key": "file.sha1",
            "value": "f2ff84e9f846ab7a16e9addc68e2de1c91af223b"
        },
        {
            "key": "file.sha256",
            "value": "498cce90e92cb8a310423e9e4a00147a132969be430f443790f46754f1deba47"
        },
        {
            "key": "file.size",
            "value": "57686"
        },
        {
            "key": "file.upload_duration",
            "value": "0.006935788"
        },
        {
            "key": "file.path",
            "value": ""
        },
        {
            "key": "file.remote_url",
            "value": "http://127.0.0.1:9000/artifacts/tmp/uploads/1634837293-51536-0001-4763-e05fbdc203ca5a39c691551ac89a3aa7?X-Amz-Expires=15300&X-Amz-Date=20211021T172813Z&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=minio%2F20211021%2Fgdk%2Fs3%2Faws4_request&X-Amz-SignedHeaders=host&X-Amz-Signature=5f10818228460e2a44d417701fdc66117d745b7684d7b885eccd6ddb91b59696"
        },
        {
            "key": "file.gitlab-workhorse-upload",
            "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGxvYWQiOnsibWQ1IjoiYzk5ZjZkYzI5NGFhNjhjM2RjM2RiN2M2ZDQ3YjM1MDAiLCJuYW1lIjoiYXJ0aWZhY3RzLnppcCIsInBhdGgiOiIiLCJyZW1vdGVfaWQiOiIxNjM0ODM3MjkzLTUxNTM2LTAwMDEtNDc2My1lMDVmYmRjMjAzY2E1YTM5YzY5MTU1MWFjODlhM2FhNyIsInJlbW90ZV91cmwiOiJodHRwOi8vMTI3LjAuMC4xOjkwMDAvYXJ0aWZhY3RzL3RtcC91cGxvYWRzLzE2MzQ4MzcyOTMtNTE1MzYtMDAwMS00NzYzLWUwNWZiZGMyMDNjYTVhMzljNjkxNTUxYWM4OWEzYWE3P1gtQW16LUV4cGlyZXM9MTUzMDBcdTAwMjZYLUFtei1EYXRlPTIwMjExMDIxVDE3MjgxM1pcdTAwMjZYLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1Nlx1MDAyNlgtQW16LUNyZWRlbnRpYWw9bWluaW8lMkYyMDIxMTAyMSUyRmdkayUyRnMzJTJGYXdzNF9yZXF1ZXN0XHUwMDI2WC1BbXotU2lnbmVkSGVhZGVycz1ob3N0XHUwMDI2WC1BbXotU2lnbmF0dXJlPTVmMTA4MTgyMjg0NjBlMmE0NGQ0MTc3MDFmZGM2NjExN2Q3NDViNzY4NGQ3Yjg4NWVjY2Q2ZGRiOTFiNTk2OTYiLCJzaGExIjoiZjJmZjg0ZTlmODQ2YWI3YTE2ZTlhZGRjNjhlMmRlMWM5MWFmMjIzYiIsInNoYTI1NiI6IjQ5OGNjZTkwZTkyY2I4YTMxMDQyM2U5ZTRhMDAxNDdhMTMyOTY5YmU0MzBmNDQzNzkwZjQ2NzU0ZjFkZWJhNDciLCJzaGE1MTIiOiI1ZWEyM2Q3MjgxMDFjOTViYzNkMjdjNjZjNzdjZjkyMzkwMWI5Yjg0NjhmMzIyMTYxZGZjODNlODNjMDZkYzdmZGI3M2ZlNDAwZTExYTQyMjVhNDBmZDE5OWYwM2EzODhkMDgwODE0YWI3YTY2NDBmYWFmNTNlNjQ4MmYxN2I3MyIsInNpemUiOiI1NzY4NiIsInVwbG9hZF9kdXJhdGlvbiI6IjAuMDA2OTM1Nzg4In0sImlzcyI6ImdpdGxhYi13b3JraG9yc2UifQ.amLUwXJcZ6LmKIA_94YzaGNgBm7O2wpPuOgR27fyUbE"
        },
        {
            "key": "metadata.remote_id",
            "value": ""
        },
        {
            "key": "metadata.size",
            "value": "214"
        },
        {
            "key": "metadata.sha512",
            "value": "83f82fddf9f932d774ec2eed7b28b6be4558e1a31c0ccf79519802563ffe3aef93ebc4747fed81df92a7e1dfd53e2d393e16ab207129e801e6846c628bd442b3"
        },
        {
            "key": "metadata.md5",
            "value": "d3711d2167e7ec4ca295eaf4042fdebe"
        },
        {
            "key": "metadata.sha1",
            "value": "711c4ee8e9064b1a025dda091fa522d25e79301a"
        },
        {
            "key": "metadata.gitlab-workhorse-upload",
            "value": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1cGxvYWQiOnsibWQ1IjoiZDM3MTFkMjE2N2U3ZWM0Y2EyOTVlYWY0MDQyZmRlYmUiLCJuYW1lIjoibWV0YWRhdGEuZ3oiLCJwYXRoIjoiL3Zhci9mb2xkZXJzL2RxLzdtNWtzY19uMWtzOGxqaHIwcmozOTE4aDAwMDBnbi9UL21ldGFkYXRhLmd6ODc4OTU2NjA2IiwicmVtb3RlX2lkIjoiIiwicmVtb3RlX3VybCI6IiIsInNoYTEiOiI3MTFjNGVlOGU5MDY0YjFhMDI1ZGRhMDkxZmE1MjJkMjVlNzkzMDFhIiwic2hhMjU2IjoiYzAxZmRiOWNlNTExNmVkZjdiODMyOTNkNWJhOGU2NDViMTY0YzEyNDU3N2Q5N2EwMDY2NTQ5NTUxYWQ1MjAzNCIsInNoYTUxMiI6IjgzZjgyZmRkZjlmOTMyZDc3NGVjMmVlZDdiMjhiNmJlNDU1OGUxYTMxYzBjY2Y3OTUxOTgwMjU2M2ZmZTNhZWY5M2ViYzQ3NDdmZWQ4MWRmOTJhN2UxZGZkNTNlMmQzOTNlMTZhYjIwNzEyOWU4MDFlNjg0NmM2MjhiZDQ0MmIzIiwic2l6ZSI6IjIxNCIsInVwbG9hZF9kdXJhdGlvbiI6IjAuNDA4OTg4MTE3In0sImlzcyI6ImdpdGxhYi13b3JraG9yc2UifQ.kYB2iw5rRsPAlkNzv_irTYDL6tmW14YLufazDe8OglU"
        },
        {
            "key": "metadata.name",
            "value": "metadata.gz"
        },
        {
            "key": "metadata.remote_url",
            "value": ""
        },
        {
            "key": "metadata.sha256",
            "value": "c01fdb9ce5116edf7b83293d5ba8e645b164c124577d97a0066549551ad52034"
        },
        {
            "key": "metadata.path",
            "value": "/var/folders/dq/7m5ksc_n1ks8ljhr0rj3918h0000gn/T/metadata.gz878956606"
        },
        {
            "key": "metadata.upload_duration",
            "value": "0.408988117"
        },
        {
            "key": "file",
            "value": null
        },
        {
            "key": "metadata",
            "value": null
        }
    ],
    "host": "gdk.test",
    "remote_ip": "172.16.123.1",
    "ua": "gitlab-runner 14.2.0 (14-2-stable; go1.13.8; linux/amd64)",
    "route": "/api/:version/jobs/:id/artifacts",
    "queue_duration_s": 0.597339,
    "redis_calls": 15,
    "redis_duration_s": 0.0038130000000000004,
    "redis_read_bytes": 200,
    "redis_write_bytes": 3816,
    "redis_cache_calls": 1,
    "redis_cache_duration_s": 0.000195,
    "redis_cache_read_bytes": 2,
    "redis_cache_write_bytes": 110,
    "redis_queues_calls": 2,
    "redis_queues_duration_s": 0.000447,
    "redis_queues_read_bytes": 178,
    "redis_queues_write_bytes": 3002,
    "redis_shared_state_calls": 12,
    "redis_shared_state_duration_s": 0.003171,
    "redis_shared_state_read_bytes": 20,
    "redis_shared_state_write_bytes": 704,
    "db_count": 19,
    "db_write_count": 7,
    "db_cached_count": 0,
    "db_replica_count": 0,
    "db_replica_cached_count": 0,
    "db_replica_wal_count": 0,
    "db_replica_wal_cached_count": 0,
    "db_primary_count": 19,
    "db_primary_cached_count": 0,
    "db_primary_wal_count": 0,
    "db_primary_wal_cached_count": 0,
    "db_replica_duration_s": 0.0,
    "db_primary_duration_s": 0.027,
    "external_http_count": 5,
    "external_http_duration_s": 0.03784700001415331,
    "cpu_s": 0.540005,
    "pid": 51536,
    "uploaded_file_upload_duration_s": 0.408988117,
    "uploaded_file_size_bytes": 214,
    "correlation_id": "01FJHYAT9XCFWQ4SHCB70BG18N",
    "meta.user": "root",
    "meta.project": "root/test-artifacts",
    "meta.root_namespace": "root",
    "meta.subscription_plan": "default",
    "meta.caller_id": "POST /api/:version/jobs/:id/artifacts",
    "meta.remote_ip": "172.16.123.1",
    "meta.feature_category": "build_artifacts",
    "meta.client_id": "user/1",
    "content_length": "5896",
    "request_urgency": "default",
    "target_duration_s": 1
}

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Erick Bajao

Merge request reports

Loading