ucentral-schema: reorganize the structure of the new schema folder

Signed-off-by: John Crispin <john@phrozen.org>
This commit is contained in:
John Crispin
2021-05-03 16:56:19 +02:00
parent 1025971757
commit df3f5cc2d7
52 changed files with 368 additions and 16 deletions

7
.gitignore vendored
View File

@@ -1,7 +1,6 @@
*.schema
docs/
new/ucentral.schema.json
new/ucentral.schema.pretty.json
new/docs/
new/central.schema.json
new/ucentral.schema.pretty.json
schema.new/ucentral.schema.json
schema.new/ucentral.schema.pretty.json
schema.new/ucentral.state.pretty.json

View File

@@ -1,5 +0,0 @@
#!/bin/sh
./merge-schema.py
mkdir -p docs
generate-schema-doc --config expand_buttons=true ucentral.schema.pretty.json docs/ucentral-schema.html

8
schema.new/generate.sh Executable file
View File

@@ -0,0 +1,8 @@
#!/bin/sh
./merge-schema.py schema config ucentral.yml ucentral.schema.json 1
./merge-schema.py schema config ucentral.yml ucentral.schema.pretty.json 0
./merge-schema.py state state state.yml ucentral.state.pretty.json 0
mkdir -p docs
generate-schema-doc --config expand_buttons=true ucentral.schema.pretty.json docs/ucentral-schema.html
generate-schema-doc --config expand_buttons=true ucentral.state.pretty.json docs/ucentral-state.html

View File

@@ -1,5 +1,6 @@
#!/usr/bin/env python3
import sys
import yaml
import json
@@ -9,11 +10,12 @@ def schema_filename(list):
return file[0].replace("/", ".") + "yml"
def entity_name(uri):
name = uri.replace("https://ucentral.io/schema/v1/", "").rstrip("/")
name = uri.replace("https://ucentral.io/" + sys.argv[1] + "/v1/", "").rstrip("/")
return name.replace("/", ".")
def schema_load(filename):
with open(filename) as stream:
print(sys.argv[2] + "/" + filename)
with open(sys.argv[2] + "/" + filename) as stream:
try:
schema = yaml.safe_load(stream)
return schema
@@ -38,12 +40,15 @@ def schema_compile(input, output, definitions, tiny):
output[k] = input[k]
return output
def schema_generate(filename, tiny):
with open(filename, 'w') as outfile:
def schema_generate():
with open(sys.argv[4], 'w') as outfile:
tiny = int(sys.argv[5])
defs = {}
schema = schema_compile(schema_load("ucentral.yml"), {}, defs, tiny)
schema = schema_compile(schema_load(sys.argv[3]), {}, defs, tiny)
schema["definitions"] = defs
json.dump(schema, outfile, ensure_ascii = tiny and False or True, indent = tiny and 0 or 4)
schema_generate('ucentral.schema.json', 1)
schema_generate('ucentral.schema.pretty.json', 0)
if len(sys.argv) != 6:
raise Exception("Invalid parameters");
schema_generate()

View File

@@ -0,0 +1,30 @@
type: array
items:
type: object
description:
An explanation about the purpose of this instance.
properties:
ipv4_addresses:
type: array
description:
An explanation about the purpose of this
items:
type: string
ipv6_addresses:
type: array
description:
An explanation about the purpose of this
items:
type: string
mac:
type: string
description:
An explanation about the purpose of this
ports:
type: array
description:
An explanation about the purpose of this
items:
description:
An explanation about the purpose
type: string

View File

@@ -0,0 +1,41 @@
type: object
description:
This section contains the traffic counters of the logical interface. Entries
that have a value of 0 will not be included.
properties:
collisions:
type: number
multicast:
type: number
rx_bytes:
type: number
description:
The number of bytes received.
rx_packets:
type: number
description:
The number of packets received.
rx_error:
type: number
description:
The number of receive errors.
rx_dropped:
type: number
description:
The number of received packets that were dropped.
tx_bytes:
type: number
description:
The number of bytes transmitted.
tx_packets:
type: number
description:
The number of packets transmitted.
tx_error:
type: number
description:
The number of transmit errors.
tx_dropped:
type: number
description:
The number of transmitted packets that were dropped.

View File

@@ -0,0 +1,7 @@
type: array
description:
The list of IPv4 addresses being used by this logical interface.
items:
type: string
description:
An IPv4 addreess.

View File

@@ -0,0 +1,22 @@
type: array
items:
type: object
description:
This section describes an IPv4 lease that we have served
properties:
address:
type: string
description:
The IPv4 that has been assigned to the networking client.
assigned:
type: string
description:
The unix time stamp when this lease was assigned.
hostname:
type: string
description:
The hostname that the client included in his request.
mac:
type: string
description:
The MAC address of the client that this lease was assigned to.

View File

@@ -0,0 +1,12 @@
type: array
items:
type: object
description:
An IPv6 address assigned to this logical interface.
properties:
address:
type: string
description: The actual IPv6 address/mask
valid:
type: number
description: How much longer this delegation is valid for.

View File

@@ -0,0 +1,17 @@
type: array
description:
items:
type: object
description:
This section describes an IPv6 lease that we have served.
properties:
addresses:
type: array
description:
A list of all IPv6 addresses that were assigned to this host.
items:
type: string
hostname:
type: string
description:
The hostname that the client sent in its solicit message.

View File

@@ -0,0 +1,30 @@
type: array
items:
type: object
description:
A list of all LLDP peers that this logical interface is connected to.
properties:
capability:
type: array
description:
The device capabilities that our neighbour is announcing.
items:
type: string
description:
type: string
description:
The chassis description that our neighbour is announcing.
id:
type: string
description:
The chassis ID/MAC that our neighbour is announcing.
management_ips:
type: array
description:
The management IPs that our neighbour is announcing.
items:
type: string
port:
type: string
description:
The physical network port that we see this neighbour on.

View File

@@ -0,0 +1,36 @@
type: array
description:
A list all OBSS that this BSS is connected to. The contained entries
depend opertational mode.
* AP - all associated stationd
* STA - the remote AP
* mesh - all mesh peers that we can see
* wds - the remote wds peer
items:
description: An explanation about the purpose
of this instance.
properties:
bssid:
type: string
description:
The BSSID of the remote BSS.
rssi:
type: number
description:
The RX signal strength of the remore BSS. (dBm)
rx_bytes:
type: number
description:
The number of bytes received.
rx_packets:
type: number
description:
The number of packets received.
tx_bytes:
type: number
description:
The number of bytes transmitted.
tx_failed:
type: number
description:
The number of packets transmitted.

View File

@@ -0,0 +1,34 @@
type: array
items:
type: object
description:
This section contains the current state of a SSID being brodcasted or
connected to by this device.
properties:
bssid:
type: string
description:
The BSSID used by this BSS instance.
ssid:
type: string
description:
The SSID that we are broadcasting or connecting to.
mode:
type: string
description:
The operational mode of the BSS.
enum:
- ap
- sta
- mesh
- wds
radio:
type: object
description:
A reference to the section describing the physical radio within this
document. (#/radios/X)
properties:
ref:
type: string
associations:
$ref: "https://ucentral.io/state/v1/interface/ssid/association/"

View File

@@ -0,0 +1,45 @@
type: array
description:
An array containing the runtime state of all logical interfaces.items:
items:
type: object
properties:
uptime:
type: number
description:
The number of seconds since the interface was brought up.
name:
type: string
description:
The administrative name of this logical interface. This field is
freetext
ntp_server:
type: string
description:
The upstream NTP server being used by this interface.
ipv4_leasetime:
type: number
description:
This is the leasetime if the IPv4 address of this logical interface was
acquired via DHCPv4.
dns_servers:
type: array
description:
The list of remote DNS servers that this logical interface uses for
domain name resolution.
items:
type: string
ipv4_addresses:
$ref: "https://ucentral.io/state/v1/interface/ipv4-address/"
ipv4_leases:
$ref: "https://ucentral.io/state/v1/interface/ipv4-lease/"
ipv6_addresses:
$ref: "https://ucentral.io/state/v1/interface/ipv6-address/"
ipv6_leases:
$ref: "https://ucentral.io/state/v1/interface/ipv6-lease/"
counters:
$ref: "https://ucentral.io/state/v1/interface/counter/"
ssids:
$ref: "https://ucentral.io/state/v1/interface/ssid/"
lldp_neighbours:
$ref: "https://ucentral.io/state/v1/interface/lldp/"

View File

@@ -0,0 +1,28 @@
type: array
description:
An array containing the current operational state of all wifi radios that the
unit has.
items:
type: object
properties:
channel_width:
type: number
description:
The channel width currently being used.
enum:
- 20
- 40
- 80
- 160
- 320
frequencies:
type: array
description:
The list of channels frquencies, that the unit is currently operating
on. Anything other than 20MHz will list several frequencies here.
items:
type: number
tx_power:
type: number
description:
The currently configure TX power of the radio in dBm.

View File

@@ -0,0 +1,11 @@
$id: https://openwrt.org/ucentral.state.json
$schema: http://json-schema.org/draft-07/schema#
description: OpenWrt uCentral state schema
type: object
properties:
unit:
$ref: "https://ucentral.io/state/v1/unit/"
radios:
$ref: "https://ucentral.io/state/v1/radio/"
interfaces:
$ref: "https://ucentral.io/state/v1/interface/"

32
schema.new/state/unit.yml Normal file
View File

@@ -0,0 +1,32 @@
type: object
description:
This section describes the current state of the OS running on the device.
properties:
load:
type: array
description:
This array hold 3 values describing the average system load for the last
1, 5 and 15 minutes.
items:
type: number
localtime:
type: number
description:
This property contains the current unix time of the device.
memory:
type: object
description:
This section describes the current memory uasge of the device.
properties:
free:
type: number
description:
The amount of free memory.
total:
type: number
description:
The total amount of memory.
uptime:
type: number
description:
The number of seconds since the unit last booted..