openapi: 3.0.1 info: title: OpenWiFi Analytics Service description: Definitions and APIs to analyze OpenWiFi network. version: 2.6.0 license: name: BSD3 url: https://github.com/Telecominfraproject/wlan-cloud-ucentralgw/blob/master/LICENSE servers: - url: 'https://localhost:16009/api/v1' security: - bearerAuth: [] - ApiKeyAuth: [] components: securitySchemes: ApiKeyAuth: type: apiKey in: header name: X-API-KEY bearerAuth: type: http scheme: bearer bearerFormat: JWT responses: NotFound: $ref: 'https://github.com/Telecominfraproject/wlan-cloud-ucentralsec/blob/main/openpapi/owsec.yaml#/components/responses/NotFound' Unauthorized: $ref: 'https://github.com/Telecominfraproject/wlan-cloud-ucentralsec/blob/main/openpapi/owsec.yaml#/components/responses/Unauthorized' Success: $ref: 'https://github.com/Telecominfraproject/wlan-cloud-ucentralsec/blob/main/openpapi/owsec.yaml#/components/responses/Success' BadRequest: $ref: 'https://github.com/Telecominfraproject/wlan-cloud-ucentralsec/blob/main/openpapi/owsec.yaml#/components/responses/BadRequest' schemas: ObjectInfo: type: object properties: id: type: string format: uuid name: type: string description: type: string notes: type: array items: $ref: '#/components/schemas/NoteInfo' created: type: integer format: int64 modified: type: integer format: int64 tags: type: array items: type: integer format: int64 VenueInfo: type: object properties: id: type: string format: uuid name: type: string description: type: string retention: type: integer interval: type: integer monitorSubVenues: type: boolean BoardInfo: type: object properties: allOf: $ref: '#/components/schemas/ObjectInfo' venueList: type: array items: $ref: '#/components/schemas/VenueInfo' BoardInfoList: type: object properties: boards: type: array items: $ref: '#/components/schemas/BoardInfo' DeviceInfo: type: object properties: type: type: string enum: - ap - switch - iot - unknown serialNumber: type: string deviceType: type: string lastHealth: type: integer format: int64 health: type: integer format: int64 lastContact: type: integer format: int64 lastPing: type: integer format: int64 lastState: type: integer format: int64 lastFirmwareUpdate: type: integer format: int64 lastFirmware: type: string lastConnection: type: integer format: int64 lastDisconnection: type: integer format: int64 pings: type: integer format: int64 states: type: integer format: int64 connected: type: boolean connectionIp: type: string associations_2g: type: integer format: int64 associations_5g: type: integer format: int64 associations_6g: type: integer format: int64 locale: type: string memory: type: number uptime: type: integer format: int64 DeviceInfoList: type: object properties: devices: type: array items: $ref: '#/components/schemas/DeviceInfo' TIDstat_entry: type: object properties: rx_msdu: type: integer format: int64 tx_msdu: type: integer format: int64 tx_msdu_failed: type: integer format: int64 tx_msdu_retries: type: integer format: int64 UE_rate: type: object properties: bitrate: type: integer format: int64 mcs: type: integer format: int64 nss: type: integer format: int64 chwidth: type: integer format: int64 ht: type: boolean sgi: type: boolean UETimePoint: type: object properties: association_bssid: type: integer format: int64 station: type: integer format: int64 rssi: type: integer format: int64 tx_bytes: type: integer format: int64 rx_bytes: type: integer format: int64 tx_duration: type: integer format: int64 rx_packets: type: integer format: int64 tx_packets: type: integer format: int64 tx_retries: type: integer format: int64 tx_failed: type: integer format: int64 connected: type: integer format: int64 inactive: type: integer format: int64 tx_rate: $ref: '#/components/schemas/UE_rate' rx_rate: $ref: '#/components/schemas/UE_rate' tidstats: type: array items: $ref: '#/components/schemas/TIDstat_entry' tx_bytes_bw: type: number rx_bytes_bw: type: number tx_packets_bw: type: number rx_packets_bw: type: number tx_failed_pct: type: number tx_retries_pct: type: number tx_duration_pct: type: number tx_bytes_delta: type: integer format: int64 rx_bytes_delta: type: integer format: int64 tx_packets_delta: type: integer format: int64 rx_packets_delta: type: integer format: int64 tx_failed_delta: type: integer format: int64 tx_retries_delta: type: integer format: int64 tx_duration_delta: type: integer format: int64 AveragePoint: type: object properties: min: type: number max: type: number avg: type: number SSIDTimePoint: type: object properties: bssid: type: string mode: type: string ssid: type: string band: type: integer associations: type: array items: $ref: '#/components/schemas/UETimePoint' tx_bytes_bw: $ref: '#/components/schemas/AveragePoint' rx_bytes_bw: $ref: '#/components/schemas/AveragePoint' tx_packets_bw: $ref: '#/components/schemas/AveragePoint' rx_packets_bw: $ref: '#/components/schemas/AveragePoint' tx_failed_pct: $ref: '#/components/schemas/AveragePoint' tx_retries_pct: $ref: '#/components/schemas/AveragePoint' tx_duration_pct: $ref: '#/components/schemas/AveragePoint' APTimePoint: type: object properties: collisions: type: integer format: int64 multicast: type: integer format: int64 rx_bytes: type: integer format: int64 rx_dropped: type: integer format: int64 rx_errors: type: integer format: int64 rx_packets: type: integer format: int64 tx_bytes: type: integer format: int64 tx_dropped: type: integer format: int64 tx_errors: type: integer format: int64 tx_packets: type: integer format: int64 tx_bytes_delta: type: integer format: int64 rx_bytes_delta: type: integer format: int64 rx_dropped_delta: type: integer format: int64 tx_dropped_delta: type: integer format: int64 rx_packets_delta: type: integer format: int64 tx_packets_delta: type: integer format: int64 rx_errors_delta: type: integer format: int64 tx_errors_delta: type: integer format: int64 RadioTimePoint: type: object properties: band: type: integer format: int64 radio_channel: type: integer format: int64 active_ms: type: integer format: int64 busy_ms: type: integer format: int64 receive_ms: type: integer format: int64 transmit_ms: type: integer format: int64 tx_power: type: integer format: int64 channel: type: integer format: int64 temperature: type: integer format: int64 noise: type: integer format: int64 active_pct: type: number busy_pct: type: number receive_pct: type: number transmit_pct: type: number DeviceTimePoint: type: object properties: id: type: string format: uuid boardId: type: string format: uuid serialNumber: type: string timestamp: type: integer format: int64 ap_data: $ref: '#/components/schemas/APTimePoint' ssid_data: type: array items: $ref: '#/components/schemas/SSIDTimePoint' radio_data: type: array items: $ref: '#/components/schemas/RadioTimePoint' device_info: $ref: '#/components/schemas/DeviceInfo' DeviceTimePointAnalysis: type: object properties: timestamp: type: integer format: int64 noise: $ref: '#/components/schemas/AveragePoint' active_pct: $ref: '#/components/schemas/AveragePoint' busy_pct: $ref: '#/components/schemas/AveragePoint' receive_pct: $ref: '#/components/schemas/AveragePoint' transmit_pct: $ref: '#/components/schemas/AveragePoint' tx_power: $ref: '#/components/schemas/AveragePoint' tx_bytes_bw: $ref: '#/components/schemas/AveragePoint' rx_bytes_bw: $ref: '#/components/schemas/AveragePoint' rx_dropped_pct: $ref: '#/components/schemas/AveragePoint' tx_dropped_pct: $ref: '#/components/schemas/AveragePoint' rx_packets_bw: $ref: '#/components/schemas/AveragePoint' tx_packets_bw: $ref: '#/components/schemas/AveragePoint' rx_errors_pct: $ref: '#/components/schemas/AveragePoint' tx_errors_pct: $ref: '#/components/schemas/AveragePoint' DeviceTimePointList: type: object properties: points: type: array items: $ref: '#/components/schemas/DeviceTimePoint' stats: type: array items: $ref: '#/components/schemas/DeviceTimePointAnalysis' DeviceTimePointStats: type: object properties: firstPoint: type: integer format: int64 lastPoint: type: integer format: int64 count: type: integer format: int64 WifiClientHistory: type: object properties: timestamp: type: integer station_id: type: string bssid: type: string ssid: type: string rssi: type: integer rx_bitrate: type: integer rx_chwidth: type: integer rx_mcs: type: integer rx_nss: type: integer rx_vht: type: boolean tx_bitrate: type: integer tx_chwidth: type: integer tx_mcs: type: integer tx_nss: type: integer tx_vht: type: boolean rx_bytes: type: integer tx_bytes: type: integer rx_duration: type: integer tx_duration: type: integer rx_packets: type: integer tx_packets: type: integer ipv4: type: string ipv6: type: string channel_width: type: integer noise: type: integer tx_power: type: integer channel: type: integer active_ms: type: integer busy_ms: type: integer receive_ms: type: integer mode: type: string ack_signal: type: integer ack_signal_avg: type: integer connected: type: integer inactive: type: integer tx_retries: type: integer venue_id: type: string WifiClientHistoryList: type: object properties: entries: type: array items: $ref: '#/components/schemas/WifiClientHistory' MacList: type: object properties: entries: type: array items: type: string ExtraSystemConfiguration: type: array items: type: object properties: parameterName: type: string parameterValue: type: string ######################################################################################### ## ## These are endpoints that all services in the OPenWiFI stack must provide ## ######################################################################################### AnyPayload: type: object properties: Document: type: string StringList: type: object properties: list: type: array items: type: string TagValuePair: type: object properties: tag: type: string value: type: string TagValuePairList: type: object properties: tagList: type: array items: $ref: '#/components/schemas/TagValuePair' TagIntPair: type: object properties: tag: type: string value: type: integer format: int64 TagIntPairList: type: object properties: tagList: type: array items: $ref: '#/components/schemas/TagIntPair' SystemCommandDetails: type: object properties: command: type: string enum: - setloglevels - getloglevels - getSubSystemNames - getLogLevelNames - stats parameters: oneOf: - $ref: '#/components/schemas/StringList' - $ref: '#/components/schemas/TagValuePairList' NoteInfo: type: object properties: created: type: integer format: int64 createdBy: type: string note: type: string SystemInfoResults: type: object properties: version: type: string uptime: type: integer format: integer64 start: type: integer format: integer64 os: type: string processors: type: integer hostname: type: string certificates: type: array items: type: object properties: filename: type: string expires: type: integer format: int64 SystemResources: type: object properties: numberOfFileDescriptors: type: integer format: int64 currRealMem: type: integer format: int64 peakRealMem: type: integer format: int64 currVirtMem: type: integer format: int64 peakVirtMem: type: integer format: int64 SystemCommandResults: type: object oneOf: - $ref: '#/components/schemas/SystemResources' - $ref: '#/components/schemas/SystemInfoResults' - $ref: '#/components/schemas/StringList' - $ref: '#/components/schemas/TagValuePairList' Dashboard: type: object properties: snapshot: type: integer format: int64 tenants: $ref: '#/components/schemas/TagIntPairList' SystemCommandSetLogLevel: type: object properties: command: type: string enum: - setloglevel subsystems: type: array items: $ref: '#/components/schemas/TagValuePair' SystemCommandReload: type: object properties: command: type: string enum: - reload subsystems: type: array items: type: string example: these are the SubSystems names retrieve with the GetSubSystemsNamesResult. SystemCommandGetLogLevels: type: object properties: command: type: string enum: - getloglevels SystemGetLogLevelsResult: type: object properties: taglist: type: array items: $ref: '#/components/schemas/TagValuePair' SystemCommandGetLogLevelNames: type: object properties: command: type: string enum: - getloglevelnames SystemCommandGetSubsystemNames: type: object properties: command: type: string enum: - getsubsystemnames SystemCommandGetLogLevelNamesResult: type: object properties: list: type: array items: type: string SystemGetSubSystemNamesResult: type: object properties: taglist: type: array items: $ref: '#/components/schemas/TagValuePair' paths: /boards: get: tags: - Boards operationId: getBoards summary: Retrieve a list of boards. parameters: - in: query description: Pagination start (starts at 1. If not specified, 1 is assumed) name: offset schema: type: integer required: false - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: limit schema: type: integer required: false - in: query description: Filter the results name: filter schema: type: string required: false - in: query description: return the number of boards name: countOnly schema: type: boolean required: false - in: query description: list of boards for a given venue name: forVenue schema: type: string format: uuid required: false responses: 200: description: Return a list of boards content: application/json: schema: $ref: '#/components/schemas/BoardInfoList' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /board/{id}: get: tags: - Boards operationId: getBoard summary: Retrieve a board parameters: - in: path name: id schema: type: string format: uuid required: true responses: 200: description: Return a list of boards content: application/json: schema: $ref: '#/components/schemas/BoardInfo' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' delete: tags: - Boards operationId: deleteBoard summary: Remove a board parameters: - in: path name: id schema: type: string format: uuid required: true responses: 200: $ref: '#/components/responses/Success' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' post: tags: - Boards operationId: createBoard summary: Create a board parameters: - in: path name: id schema: type: string format: uuid required: true example: value should be 0 for a post requestBody: content: application/json: schema: $ref: '#/components/schemas/BoardInfo' responses: 200: $ref: '#/components/schemas/BoardInfo' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' put: tags: - Boards operationId: modifyBoard summary: Modify a board parameters: - in: path name: id schema: type: string format: uuid required: true requestBody: content: application/json: schema: $ref: '#/components/schemas/BoardInfo' responses: 200: $ref: '#/components/schemas/BoardInfo' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /board/{id}/devices: get: tags: - Board Devices summary: Get basic information about all the devices for a venue. operationId: getBoardDevices parameters: - in: path name: id schema: type: string format: uuid required: true responses: 200: $ref: '#/components/schemas/DeviceInfoList' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /board/{id}/timepoints: get: tags: - Board data summary: retrieve board data for a given time period. operationId: getBoardTimepoint parameters: - in: path name: id schema: type: string format: uuid required: true - in: query name: fromDate schema: type: integer required: false - in: query name: endDate schema: type: integer required: false - in: query name: maxRecords schema: type: integer default: 100 required: false - in: query name: statsOnly schema: type: boolean default: false required: false - in: query name: pointsOnly schema: type: boolean default: false required: false - in: query name: pointsStatsOnly schema: type: boolean default: false required: false responses: 200: $ref: '#/components/schemas/DeviceTimePointList' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' delete: tags: - Board data summary: delete board data for a given time period. operationId: deleteBoardTimepoints parameters: - in: path name: id schema: type: string format: uuid required: true - in: query name: fromDate schema: type: integer required: false - in: query name: endDate schema: type: integer required: false responses: 200: $ref: '#/components/responses/Success' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /wifiClientHistory: get: tags: - WiFiClientHistory operationId: getWifiClientHistory summary: Retrieve WiFi client history for debugging purpose parameters: - in: query name: fromDate schema: type: integer required: false - in: query name: endDate schema: type: integer required: false - in: query description: Pagination start (starts at 1. If not specified, 1 is assumed) name: offset schema: type: integer required: false - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: limit schema: type: integer required: false - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: macsOnly schema: type: boolean default: false required: true - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: macFilter schema: type: string example: 112233445566, 11223344*, *5566 required: false - in: query description: The venue to for the search. name: venue schema: type: string format: uuid required: true responses: 200: $ref: '#/components/schemas/StringList' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /wifiClientHistory/{client}: get: tags: - WiFiClientHistory operationId: getWifiClients summary: Retrieve WiFi client history for debugging purpose parameters: - in: path name: client schema: type: string example: "112233aabbcc" required: true - in: query name: fromDate schema: type: integer required: false - in: query name: endDate schema: type: integer required: false - in: query description: Pagination start (starts at 1. If not specified, 1 is assumed) name: offset schema: type: integer required: false - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: limit schema: type: integer required: false - in: query description: The venue to for the search. name: venue schema: type: string format: uuid required: true - in: query description: return extended information name: orderBy schema: type: string example: serialNumber:a,created:d required: false - in: query description: return extended information name: orderSpec schema: type: boolean default: false required: false responses: 200: $ref: '#/components/schemas/WifiClientHistoryList' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' delete: tags: - WiFiClientHistory operationId: deleteWifiClientHistory summary: Retrieve WiFi client history for debugging purpose parameters: - in: query description: The venue to for the search. name: venue schema: type: string format: uuid required: true - in: path name: client schema: type: string example: "112233aabbcc" required: true - in: query name: fromDate schema: type: integer required: false - in: query name: endDate schema: type: integer required: false - in: query description: Maximum number of entries to return (if absent, no limit is assumed) name: macFilter schema: type: string example: 112233445566, 11223344*, *5566 required: false responses: 200: $ref: '#/components/responses/Success' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' ######################################################################################### ## ## These are endpoints that all services in the OpenWiFi stack must provide ## ######################################################################################### /system: post: tags: - System Commands summary: Perform some system wide commands. operationId: systemCommand requestBody: description: Command details content: application/json: schema: oneOf: - $ref: '#/components/schemas/SystemCommandSetLogLevel' - $ref: '#/components/schemas/SystemCommandReload' - $ref: '#/components/schemas/SystemCommandGetLogLevels' - $ref: '#/components/schemas/SystemCommandGetLogLevelNames' - $ref: '#/components/schemas/SystemCommandGetSubsystemNames' responses: 200: description: Successful command execution content: application/json: schema: oneOf: - $ref: '#/components/schemas/SystemGetLogLevelsResult' - $ref: '#/components/schemas/SystemCommandGetLogLevelNamesResult' - $ref: '#/components/schemas/SystemGetSubSystemNamesResult' 400: $ref: '#/components/responses/BadRequest' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' get: tags: - System Commands summary: Retrieve different values from the running service. operationId: getSystemCommand parameters: - in: query description: Get a value name: command schema: type: string enum: - info - extraConfiguration - resources required: true responses: 200: $ref: '#/components/schemas/SystemCommandResults' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' /systemConfiguration: get: tags: - SystemConfiguration summary: Retrieve system configuration items operationId: getSystemConfiguration parameters: - in: query description: Which parameters you want to retrieve name: entries schema: type: string example: - element1 - element1,element2,element3 required: false responses: 200: description: List of configuration elements content: application/json: schema: type: array items: $ref: '#/components/schemas/ExtraSystemConfiguration' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' put: tags: - SystemConfiguration summary: Set some or all system configuration operationId: setSystemConfiguration requestBody: content: application/json: schema: $ref: '#/components/schemas/ExtraSystemConfiguration' responses: 200: $ref: '#/components/schemas/ExtraSystemConfiguration' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound' delete: tags: - SystemConfiguration summary: Delete all additional system configuration operationId: deleteSystemConfiguration responses: 200: $ref: '#/components/responses/Success' 403: $ref: '#/components/responses/Unauthorized' 404: $ref: '#/components/responses/NotFound'