get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/69020/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 69020,
    "url": "http://patches.dpdk.org/api/patches/69020/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200421123949.38270-10-ciara.power@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20200421123949.38270-10-ciara.power@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200421123949.38270-10-ciara.power@intel.com",
    "date": "2020-04-21T12:39:41",
    "name": "[v3,09/17] usertools: add new telemetry python script",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "a30eb673dedbfa051eafa01188a8f8e5db0951a2",
    "submitter": {
        "id": 978,
        "url": "http://patches.dpdk.org/api/people/978/?format=api",
        "name": "Ciara Power",
        "email": "ciara.power@intel.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20200421123949.38270-10-ciara.power@intel.com/mbox/",
    "series": [
        {
            "id": 9543,
            "url": "http://patches.dpdk.org/api/series/9543/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=9543",
            "date": "2020-04-21T12:39:32",
            "name": "update and simplify telemetry library.",
            "version": 3,
            "mbox": "http://patches.dpdk.org/series/9543/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/69020/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/69020/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 8E1F2A0597;\n\tTue, 21 Apr 2020 15:01:39 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id B5F441D5F6;\n\tTue, 21 Apr 2020 14:59:48 +0200 (CEST)",
            "from mga11.intel.com (mga11.intel.com [192.55.52.93])\n by dpdk.org (Postfix) with ESMTP id 4DCB41D5C9\n for <dev@dpdk.org>; Tue, 21 Apr 2020 14:59:46 +0200 (CEST)",
            "from fmsmga004.fm.intel.com ([10.253.24.48])\n by fmsmga102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 21 Apr 2020 05:59:45 -0700",
            "from silpixa00399953.ir.intel.com (HELO\n silpixa00399953.ger.corp.intel.com) ([10.237.222.53])\n by fmsmga004.fm.intel.com with ESMTP; 21 Apr 2020 05:59:43 -0700"
        ],
        "IronPort-SDR": [
            "\n 0Ee2TS1XqXVXYBwwAGurhIcmrBfXherfXOIe48lahhZR2qgSgo4w4eB6Pe6m02XR9YZxzfTqpj\n bzJ0aMsKkdCw==",
            "\n HGmYDEFDThlldL6X1bKQp4CZLyaEiGrmQ96uo/6vaKFhrrujKDjTFhZStXJYcnVakxKTP3iu+F\n /w8n8Ov1ajNQ=="
        ],
        "X-Amp-Result": "SKIPPED(no attachment in message)",
        "X-Amp-File-Uploaded": "False",
        "X-ExtLoop1": "1",
        "X-IronPort-AV": "E=Sophos;i=\"5.72,410,1580803200\"; d=\"scan'208\";a=\"279629150\"",
        "From": "Ciara Power <ciara.power@intel.com>",
        "To": "dev@dpdk.org,\n\tkevin.laatz@intel.com",
        "Cc": "reshma.pattan@intel.com, jerinjacobk@gmail.com, david.marchand@redhat.com,\n keith.wiles@intel.com, mb@smartsharesystems.com, thomas@monjalon.net,\n Bruce Richardson <bruce.richardson@intel.com>,\n Ciara Power <ciara.power@intel.com>",
        "Date": "Tue, 21 Apr 2020 13:39:41 +0100",
        "Message-Id": "<20200421123949.38270-10-ciara.power@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20200421123949.38270-1-ciara.power@intel.com>",
        "References": "<20200319171907.60891-1-ciara.power@intel.com>\n <20200421123949.38270-1-ciara.power@intel.com>",
        "Subject": "[dpdk-dev] [PATCH v3 09/17] usertools: add new telemetry python\n\tscript",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Bruce Richardson <bruce.richardson@intel.com>\n\nThis patch adds a python script that can be used with the new telemetry\nsocket. It connects as a client to the socket, and allows the user send\na command and see the JSON response.\n\nThe example usage below shows the script connecting to the new telemetry\nsocket, and sending two basic ethdev commands entered by the user.\nThe response for each command is shown below the user input.\n\nConnecting to /var/run/dpdk/rte/dpdk_telemetry.v2\n{\"pid\": 63724, \"version\": \"DPDK 20.05.0-rc0\", \"max_output_len\": 16384}\n--> /\n{\"/\": [\"/\", \"/ethdev/link_status\", \"/ethdev/list\", \"/ethdev/xstats\", \\\n    \"/info\"]}\n--> /info\n{\"/info\": {\"pid\": 63724, \"version\": \"DPDK 20.05.0-rc0\", \\\n    \"max_output_len\": 16384}}\n--> /ethdev/list\n{\"/ethdev/list\": [0, 1]}\n--> /ethdev/link_status,0\n{\"/ethdev/link_status\": {\"status\": \"UP\", \"speed\": 10000, \"duplex\": \\\n    \"full-duplex\"}}\n--> /ethdev/xstats,0\n{\"/ethdev/xstats\": {\"rx_good_packets\": 0, \"tx_good_packets\": 0, \\\n    <snip>\n    \"tx_priority7_xon_to_xoff_packets\": 0}}\n\nSigned-off-by: Bruce Richardson <bruce.richardson@intel.com>\nSigned-off-by: Ciara Power <ciara.power@intel.com>\n\n---\nv2:\n  - Renamed new python script to dpdk-telemetry.py.\n  - Fixed script to validate input before sending to Telemetry.\n\nv3: Added readline support\n---\n usertools/dpdk-telemetry.py | 83 +++++++++++++++++++++++++++++++++++++\n usertools/meson.build       |  2 +-\n 2 files changed, 84 insertions(+), 1 deletion(-)\n create mode 100755 usertools/dpdk-telemetry.py",
    "diff": "diff --git a/usertools/dpdk-telemetry.py b/usertools/dpdk-telemetry.py\nnew file mode 100755\nindex 0000000000..afbf01b196\n--- /dev/null\n+++ b/usertools/dpdk-telemetry.py\n@@ -0,0 +1,83 @@\n+#! /usr/bin/python3\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2020 Intel Corporation\n+\n+\"\"\"\n+Script to be used with V2 Telemetry.\n+Allows the user input commands and read the Telemetry response.\n+\"\"\"\n+\n+import socket\n+import os\n+import glob\n+import json\n+import readline\n+\n+# global vars\n+TELEMETRY_VERSION = \"v2\"\n+CMDS = []\n+\n+\n+def read_socket(sock, buf_len, echo=True):\n+    \"\"\" Read data from socket and return it in JSON format \"\"\"\n+    reply = sock.recv(buf_len).decode()\n+    try:\n+        ret = json.loads(reply)\n+    except json.JSONDecodeError:\n+        print(\"Error in reply: \", reply)\n+        sock.close()\n+        raise\n+    if echo:\n+        print(json.dumps(ret))\n+    return ret\n+\n+\n+def handle_socket(path):\n+    \"\"\" Connect to socket and handle user input \"\"\"\n+    sock = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)\n+    global CMDS\n+    print(\"Connecting to \" + path)\n+    try:\n+        sock.connect(path)\n+    except OSError:\n+        print(\"Error connecting to \" + path)\n+        sock.close()\n+        return\n+    json_reply = read_socket(sock, 1024)\n+    output_buf_len = json_reply[\"max_output_len\"]\n+\n+    # get list of commands for readline completion\n+    sock.send(\"/\".encode())\n+    CMDS = read_socket(sock, output_buf_len, False)[\"/\"]\n+\n+    # interactive prompt\n+    text = input('--> ').strip()\n+    while text != \"quit\":\n+        if text.startswith('/'):\n+            sock.send(text.encode())\n+            read_socket(sock, output_buf_len)\n+        text = input('--> ').strip()\n+    sock.close()\n+\n+\n+def readline_complete(text, state):\n+    \"\"\" Find any matching commands from the list based on user input \"\"\"\n+    all_cmds = ['quit'] + CMDS\n+    if text:\n+        matches = [c for c in all_cmds if c.startswith(text)]\n+    else:\n+        matches = all_cmds\n+    return matches[state]\n+\n+\n+readline.parse_and_bind('tab: complete')\n+readline.set_completer(readline_complete)\n+readline.set_completer_delims(readline.get_completer_delims().replace('/', ''))\n+\n+# Path to sockets for processes run as a root user\n+for f in glob.glob('/var/run/dpdk/*/dpdk_telemetry.%s' % TELEMETRY_VERSION):\n+    handle_socket(f)\n+# Path to sockets for processes run as a regular user\n+for f in glob.glob('/run/user/%d/dpdk/*/dpdk_telemetry.%s' %\n+                   (os.getuid(), TELEMETRY_VERSION)):\n+    handle_socket(f)\ndiff --git a/usertools/meson.build b/usertools/meson.build\nindex 149e788e3d..64e27238f4 100644\n--- a/usertools/meson.build\n+++ b/usertools/meson.build\n@@ -1,4 +1,4 @@\n # SPDX-License-Identifier: BSD-3-Clause\n # Copyright(c) 2017 Intel Corporation\n \n-install_data(['dpdk-devbind.py', 'dpdk-pmdinfo.py'], install_dir: 'bin')\n+install_data(['dpdk-devbind.py', 'dpdk-pmdinfo.py', 'dpdk-telemetry.py'], install_dir: 'bin')\n",
    "prefixes": [
        "v3",
        "09/17"
    ]
}