Challenge Overview
Challenge Objectives
-
Target environment: iOS, Nodejs
-
Basic Requirements:
-
Propose target architecture for Telemetry iPad app based on provided use cases
-
Propose target architecture for Nodejs backend based on provided use cases
-
Define communication interface (REST API) for iPad app - Nodejs backend interaction
Project Background
Telemetry is a MVP project for one of our clients to help proactively identify “Network Slowness” and other network related complaints from the retail offices. Each retail store has multiple iPads that are used to provision new and existing customers.These iPads can be leveraged to run an “agent” that will periodically (1) test the network latency by running icmp echo request to one or more configured hosts in the client’s network. And (2) collect operational statistics on the iPad like CPU, signal strength, and memory usage.
These test will run in the background on configured intervals and the sales agent will be unaware. These statistics will be gathered and spooled locally on the device until a second configured timer is reach and they are uploaded to a central server( henceforth referred to as "the server”).
Both the agent and the server will be developed by Topcoder crowdsourcing community.
Technology Stack
iOSNodejs
Individual requirements
In this challenge, you are required to produce the architecture for-
iPad app
-
Nodejs backend
-
Interaction between iPad app & Nodejs backend
The iPad app has the following requirements
-
Native iOS app written in Swift 4.x
-
Deployment target with iOS 11.0
-
We need to gather the following statistics with regards to the iPad’s radio
-
RSSI (Received Signal Strength Indicator)
-
Transmission Rate (Tx)
-
Receiver Sensitivity
-
Access Point Mac Address
-
Client Mac Address
-
Noise
-
Channel Information - name, band & width
-
SSID
-
Retries/Retransmission/Error rate
-
We need timestamps recorded as well for all stats to be able to piece it all together to get an instantaneous snapshot at any given time
-
We need to know if Wi-Fi/LTE switch was manually enacted or done so via the iPad’s automatic switch (Wi-Fi assist)
-
We need to know CPU usage of the iPad
-
We need to know memory utilization of the iPad
-
We need some iPad identifiers such as iPad name, serial, store number again to piece it all together and to be able to drill into stores/devices individually
-
App should ideally run in Background fetch mode. In a perfect world, this thing would be completely transparent to the user. If not, the app should have a minimalistic UI and be able to run in background mode most of the times.
-
The stats collected by app will be aggregated and viewed on a website, so the UI on the device isn't critical, the data will be submitted via a REST call. The app UI will be minimal like a splash screen with versioning - that’s it
-
Authentication is not required for this app
Nodejs Backend Requirements
The Nodejs backend has the following requirements-
Should use Nodejs 10.x
-
Propose what should be the underlying DB (Mongo vs MySQL vs something else) and why and build out the backend data models
-
Propose the overall architecture of controllers, services, views and models
Interaction between iPad app & Nodejs backend Requirements
-
Define the REST API interface (in Swagger format) that can be used by the iPad app to persist data in the backend
-
Define the REST API interface which could be used by a web app to display the collected metrics
Final Submission Guidelines
What To Submit
- Architecture assets as mentioned above
- If you want to submit a basic skeleton iPad app & Nodejs backend, feel free to do that but it’s not mandatory to do so.
Review
- All submissions will be judged subjectively on a scale of 1-10 based on the completeness & level of detail provided in the architecture assets