{"id":22610449,"url":"https://github.com/specure/ont-drive-test-tool-tracker","last_synced_at":"2025-03-28T23:13:21.007Z","repository":{"id":258366322,"uuid":"873554191","full_name":"specure/ont-drive-test-tool-tracker","owner":"specure","description":"App for mobile internet drive testing - logs network type, signal, temperature, location and optionally speed","archived":false,"fork":false,"pushed_at":"2025-01-28T09:14:31.000Z","size":1337,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-01-28T10:25:07.011Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/specure.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-16T11:11:04.000Z","updated_at":"2025-01-28T09:14:36.000Z","dependencies_parsed_at":"2025-01-28T10:23:13.948Z","dependency_job_id":"d450c70c-b0d4-4b63-a3b3-7d6a16f4e36d","html_url":"https://github.com/specure/ont-drive-test-tool-tracker","commit_stats":null,"previous_names":["specure/ont-drive-test-tool-tracker"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specure%2Font-drive-test-tool-tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specure%2Font-drive-test-tool-tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specure%2Font-drive-test-tool-tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/specure%2Font-drive-test-tool-tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/specure","download_url":"https://codeload.github.com/specure/ont-drive-test-tool-tracker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246112667,"owners_count":20725301,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-08T16:06:58.207Z","updated_at":"2025-03-28T23:13:20.963Z","avatar_url":"https://github.com/specure.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SignalTracker android app\n\nThis project meant to be for tracking signal\n\n## Prerequisites:\n\nthis is meant to be build on macOS or linux-based systems.\n\n- SWIG\n- shell\n\n\n## Build:\n\n### Create or add values to local.properties file:\nHOSTNAME=\u003cYOUR_IPERF_HOSTNAME\u003e\nFEATURE_SPEED_TEST_ENABLED=\u003ctrue OR false\u003e\nMAPS_API_KEY=\u003cGOOGLE MAPS API KEY\u003e\nGITHUB_API_URL=\u003chttps://api.github.com/repos/{owner}/{repo-name}\u003e\nGITHUB_API_TOKEN=\u003cTOKEN TO ACCESS REPOSITORY\u003e\n\nexample:\nHOSTNAME=myiperfhostname.com\nFEATURE_SPEED_TEST_ENABLED=true\nMAPS_API_KEY=dfsfdsggfkg-fgsdgljsgn-gfsgs\nGITHUB_API_URL=https://api.github.com/repos/my-account/my-awsome-app\nGITHUB_API_TOKEN=github_pat_sdkjbsfkjdsifjlsdlkf\n\n### Register app in the firebase or remove Firebase integration\n\nRegister app in the firebase and put google-services.json in the \"app\" folder (or remove firebase\nintegration by removing from project level build.gradle.kts file\n\n\"alias(libs.plugins.google.services) apply false\"\n\nand from app build.gradle.kts file:\n\n\"implementation(platform(libs.firebase))\"\n\nand from AndroidApplicationConventionPlugin file:\n\n\"apply(\"com.google.gms.google-services\")\"\n\nand sync gradle)\n\n### Get and init submodules with correct branches\n\nin iperf-jni-upload folder\n\ngit submodule init\ngit submodule update\n\nand then in iperf-jni-upload/iperf/src/main/jni/iperf3\n\ngit submodule init\ngit submodule update\n\nin iperf-jni-download folder\n\ngit submodule init\ngit submodule update\n\nand switch to master-neo branch (to get different package name of the lib)\n\nand then in iperf-jni-download/iperf/src/main/jni/iperf3\n\ngit submodule init\ngit submodule update\n\nto get all source files\n\n## Manual:\n\n1. Start the app\n2. grant all permissions\n3. turn off wifi adapter\n4. turn on mobile data\n5. turn on location services\n6. check if you are able to see network info, location info, temperature on the overview screen\n7. tap on the network icon to switch to track mode\n8. check if you are able to see network info, position on map, temperature on the track screen\n9. tap play button on the bottom to start logging values\n10. tap stop and confirm it to stop logging values\n11. Allow install from unknown source of the app in settings (allow from signal tracker source) -\n    for interactive update it should ask automatically for the first time update\n\n\n## TODO:\n\nHandle when user do not give bluetooth permission or add settings to enable manager app for\nbluetooth\n\nSend not activated state as soon as app is back in the overview/home screen instead of active track\nscreen - FIXED\n\nAfter returning to tracking from notification = Iperf tests break\n\nNotification does not shows current time after stopping and starting from manager app - as it is not\nassociated correctly with current data\ninstances (I assume it has connection with previous issue)\n\nFor now we have doubled IPERF library just with different .so file to build and different package \nname to be able to create 2 different instances of the IPERF library which we need to perform \nsimultaneously upload and download.\n\nIperf lib implementation provide only singleton so we are not able to perform upload and download \nsimultaneously with one package of this library. \n- solved by 2 different package names for the same library and include 2 times \n- TODO: We need to find better solution for this with only one copy of library.\n\nMake autorestart of Iperf test on error\n\n- problems with server side as after error it is not able to connect again\n- possible solutions:\n  - have multiple instances of server and cycle between them + detect server issue and restart\n    server if possible\n\n- observation:\n  - When there is a network type switch even between mobile network types (e.g. LTE to HSPDA or EDGE\n    or...) and the test survives, the bandwidth is no more limited - maybe if there was technology\n    with lower\n    speeds, and max bandwidth is not reached then it has like more data buffered and therefore it\n    put more data\n    while it does not empty that buffer to a bandwidth value set originally (observable thru\n    emulator network\n    switching)\n\nThere is no check during the running test if mobile data are the one used for network traffic (\npossible to add)\n\n- added basic monitoring for WIFI network and other types - so in log user will see what type of\n  network is used\n\nCurrently ending and starting phase are not parsed in detail, so we are missing some states of the\ntest\n- like starting, connecting,\n\n\nCurrently we are not able to stop test in execution\n- SOLVED\n\nDo not stop time on pause\n- SOLVED\n\n\n## Potential limitation:\n- during the test it seems like android OS make batches and it results in 0.0 bandwidth for some \nperiod (even few seconds), mostly seen with upload test\n- when network switches from one type to another (e.g. LTE to Edge) test can be interrupted with\n  error\n- starting test can take at least 1s with great conditions, during the testing I experienced \n15s from test start to first bandwidth value acquired from the test\n- unable to force user to not turn on wifi adapter\n\n## Expected behavior\n\n- battery updates can be not often, but as soon as temperature change, it is updated (sometime even\n  half an hour if environment and execution is)\n\n## Exported values explanation\n\nTime format or local date and time is \"yyyy-MM-dd HH:mm:ss\"\n\n- **durationMillis** - Test duration from the time user hit start button in milliseconds\n- **timestamp** - Local Date and time of the entry\n- **timestampRaw** - Unix timestamp of the entry (System.currentTimeMillis())\n- **downloadSpeed** - download speed (for unit see **downloadSpeedUnit**)\n- **downloadSpeedUnit** - unit of the speed [bits/sec|Mbits/sec|Kbits/sec|Gbits/sec]\n- **downloadSpeedTestState** - **INITIALIZING**/**RUNNING**/**ERROR** - **INITIALIZING** when test\n  is\n  starting and establishing connection to server, **RUNNING** - when there is speed measured and\n  data\n  are transferred from client to server or vice-versa, **ERROR** - when some error happened,\n  description of the error should be in **downloadSpeedTestError** field\n- **downloadSpeedTestError** - String of the error, null if no error occurred or there are no\n  details\n  for error\n- **downloadSpeedTestTimestamp** - Local Date and time of the download speed part update time\n- **downloadSpeedTestTimestampRaw** - Unix timestamp of the download speed part (\n  System.currentTimeMillis())\n- **uploadSpeed** - upload speed (for unit see **uploadSpeedUnit**)\n- **uploadSpeedUnit** - unit of the speed [bits/sec|Mbits/sec|Kbits/sec|Gbits/sec]\n- **uploadSpeedTestState** - **INITIALIZING**/**RUNNING**/**ERROR** - **INITIALIZING** when test is\n  starting and establishing connection to server, **RUNNING** - when there is speed measured and\n  data\n  are transferred from client to server or vice-versa, **ERROR** - when some error happened,\n  description of the error should be in **uploadSpeedTestError** field\n- **uploadSpeedTestError** - String of the error, null if no error occurred or there are no details\n  for error\n- **uploadSpeedTestTimestamp** - Local Date and time of the upload speed part update time\n- **uploadSpeedTestTimestampRaw** - Unix timestamp of the upload speed part (\n  System.currentTimeMillis())\n- **latitude** - GPS latitude coordinate\n- **longitude** - GPS longitude coordinate\n- **locationTimestamp** - Local Date and time of the location part update time\n- **locationTimestampRaw** - Unix timestamp of the location part (System.currentTimeMillis())\n- **networkType** - Main network type (CELLULAR, WIFI, BLUETOOTH, VPN, ETHERNET, UNKNOWN)\n- **mobileNetworkOperator** - Network operator obtained from network\n- **mobileNetworkType** - String representation of mobile network type e.g. (LTE, EDGE, HSPDA, ...)\n- **signalStrength** - in dBm, primary connected cell signal\n- **networkInfoTimestamp** - Local Date and time of the network info part update time\n- **networkInfoTimestampRaw** - Unix timestamp of the network info part (System.currentTimeMillis())\n- **connectionStatus** - **CONNECTED**/**DISCONNECTED** - **CONNECTED** when network is available\n  and\n  address is able to be resolved by DNS, **DISCONNECTED** otherwise\n- **temperatureCelsius** - Device temperature in Celsius degrees\n- **temperatureTimestamp** - Local Date and time of the temperature part update time\n- **temperatureTimestampRaw** - Unix timestamp of the temperature part (\n  System.currentTimeMillis()) -\ndo not need to be very fresh if temperature does not change (it should update only if temperature\nchanges)\n\n## Testing scenarios\n\n## Testing scenarios with manager app\n\n### Testing resetting values\n\ndevice C setup (signal tracker client):\n\n- installed signal tracker app with default values, all permissions granted\n- keep iperf settings same as on C2 to make them collide\n- go to active track screen\n\ndevice M setup (signal tracker manager):\n\n- installed signal tracker manager app with defaults, all permissions granted\n- connect to C\n- start C with manager app - wait to get running state\n- stop with app on C - finish it\n- go back to tracking screen on C\n- countdown should not start again\n- countdown should be on 00:00:00\n- should be able to start by M and C\n\n### Showing test error\n\ndevice C1 setup (signal tracker client 1):\n\n- installed signal tracker app with default values, all permissions granted\n- keep iperf settings same as on C2 to make them collide\n- go to active track screen\n\ndevice C2 setup (signal tracker client 2):\n\n- installed signal tracker app with default values, all permissions granted\n- keep iperf settings same as on C1 to make them collide\n- go to active track screen\n\ndevice M setup (signal tracker manager):\n\n- installed signal tracker manager app with defaults, all permissions granted\n- connect to C1 and to C2\n- start C1 with manager app - wait to get running state\n- start C2 with manager app - should get error state on C2 ","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecure%2Font-drive-test-tool-tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fspecure%2Font-drive-test-tool-tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fspecure%2Font-drive-test-tool-tracker/lists"}