1{
2    "$schema": "http://json-schema.org/draft-04/schema#",
3
4    "type": "array",
5    "items": {
6        "anyOf": [
7            { "$ref": "#/definitions/meta" },
8            { "$ref": "#/definitions/kernel" },
9            { "$ref": "#/definitions/job" },
10            { "$ref": "#/definitions/process" },
11            { "$ref": "#/definitions/thread" }
12        ]
13    },
14
15    "definitions": {
16        "meta": {
17            "type": "object",
18            "properties": {
19                "type": {
20                    "type": "string",
21                    "pattern": "^__"
22                },
23                "timestamp": {
24                    "type": "string",
25                    "format": "date-time"
26                }
27            },
28            "required": [ "type" ]
29        },
30        "_node": {
31            "type": "object",
32            "properties": {
33                "id": { "type": "string" },
34                "type": { "type": "string" },
35                "parent": { "type": "string" },
36                "name": { "type": "string" }
37            },
38            "required": [ "id", "type", "parent", "name" ]
39        },
40        "kernel": {
41            "allOf": [
42                { "$ref": "#/definitions/_node" },
43                {
44                    "properties": {
45                        "id": { "type": "string", "pattern": "^kernel/.*" },
46                        "type": { "type": "string", "pattern": "^kernel$" },
47                        "size_bytes": { "type": "integer" }
48                    },
49                    "required": [ "size_bytes" ]
50                }
51            ]
52        },
53        "_task": {
54            "allOf": [
55                { "$ref": "#/definitions/_node" },
56                {
57                    "properties": {
58                        "koid": { "type": "integer" }
59                    },
60                    "required": [ "koid" ]
61                }
62            ]
63        },
64        "job": {
65            "allOf": [
66                { "$ref": "#/definitions/_task" },
67                {
68                    "properties": {
69                        "id": { "type": "string", "pattern": "^j/.*" },
70                        "type": { "type": "string", "pattern": "^j$" }
71                    }
72                }
73            ]
74        },
75        "process": {
76            "allOf": [
77                { "$ref": "#/definitions/_task" },
78                {
79                    "properties": {
80                        "id": { "type": "string", "pattern": "^p/.*" },
81                        "type": { "type": "string", "pattern": "^p$" },
82                        "private_bytes": { "type": "integer" },
83                        "shared_bytes": { "type": "integer" },
84                        "pss_bytes": { "type": "integer" },
85                        "vmos": {
86                            "type": "array",
87                            "items": { "$ref": "#/definitions/vmo" }
88                        },
89                        "vmo_refs": {
90                            "type": "array",
91                            "items": { "$ref": "#/definitions/vmo_ref" }
92                        },
93                        "handle_stats": {
94                            "type": "object",
95                            "patternProperties": {
96                                "[a-zA-Z0-9_]+": {
97                                    "type": "integer"
98                                }
99                            }
100                        }
101                    },
102                    "required": [ "private_bytes", "shared_bytes", "pss_bytes" ]
103                }
104            ]
105        },
106        "thread": {
107            "allOf": [
108                { "$ref": "#/definitions/_task" },
109                {
110                    "properties": {
111                        "id": { "type": "string", "pattern": "^t/.*" },
112                        "type": { "type": "string", "pattern": "^t$" },
113                        "state": { "type": "string" }
114                    },
115                    "required": [ "state" ]
116                }
117            ]
118        },
119        "vmo": {
120            "type": "object",
121            "properties": {
122                "koid": { "type": "integer" },
123                "name": { "type": "string" },
124                "size_bytes": { "type": "integer" },
125                "parent_koid": { "type": "integer" },
126                "num_children": { "type": "integer" },
127                "num_mappings": { "type": "integer" },
128                "share_count": { "type": "integer" },
129                "committed_bytes": { "type": "integer" }
130            },
131            "required": [ "koid" ]
132        },
133        "vmo_ref": {
134            "type": "object",
135            "properties": {
136                "vmo_koid": { "type": "integer" },
137                "via": {
138                    "type": "array",
139                    "items": { "type": "string" }
140                },
141                "handle_rights": {
142                    "type": "array",
143                    "items": { "type": "string" }
144                }
145            },
146            "required": [ "vmo_koid", "via" ]
147        }
148    }
149}
150