{"id":43124168,"url":"https://github.com/emranbm/sls-for-iot","last_synced_at":"2026-01-31T20:06:38.593Z","repository":{"id":37564732,"uuid":"335028657","full_name":"emranbm/sls-for-iot","owner":"emranbm","description":"Master of Science Project, at Sharif University of Technology","archived":false,"fork":false,"pushed_at":"2022-12-15T19:14:21.000Z","size":15674,"stargazers_count":2,"open_issues_count":5,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-02T08:41:15.474Z","etag":null,"topics":["edge-computing","iot","storage","storage-manager"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emranbm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-02-01T17:26:59.000Z","updated_at":"2022-11-08T00:45:07.000Z","dependencies_parsed_at":"2023-01-29T04:16:03.396Z","dependency_job_id":null,"html_url":"https://github.com/emranbm/sls-for-iot","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/emranbm/sls-for-iot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emranbm%2Fsls-for-iot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emranbm%2Fsls-for-iot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emranbm%2Fsls-for-iot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emranbm%2Fsls-for-iot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emranbm","download_url":"https://codeload.github.com/emranbm/sls-for-iot/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emranbm%2Fsls-for-iot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28952588,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T18:30:42.805Z","status":"ssl_error","status_checked_at":"2026-01-31T18:30:19.593Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["edge-computing","iot","storage","storage-manager"],"created_at":"2026-01-31T20:06:38.521Z","updated_at":"2026-01-31T20:06:38.585Z","avatar_url":"https://github.com/emranbm.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Shared Local data Storage for IoT\n[![SLS SDK test](https://github.com/emranbm/sls-for-iot/actions/workflows/sls-sdk-test.yml/badge.svg)](https://github.com/emranbm/sls-for-iot/actions/workflows/sls-sdk-test.yml)\n[![Simulated device build](https://github.com/emranbm/sls-for-iot/actions/workflows/simulated-device-build.yml/badge.svg)](https://github.com/emranbm/sls-for-iot/actions/workflows/simulated-device-build.yml)\n[![UML diagrams build](https://github.com/emranbm/sls-for-iot/actions/workflows/uml-diagrams-build.yml/badge.svg)](https://github.com/emranbm/sls-for-iot/actions/workflows/uml-diagrams-build.yml)\n\nA design for IoT devices to share their storage across a local network  \nIt's my Master of Science project at [Sharif university of technology](http://www.sharif.ir/).\n\n## Roadmap\nHere's my roadmap to get the project done. It's not fixed and is subject to change if required.\n- [x] Define the project\n- [x] Get the acceptance of the proposal\n- [x] Create a dockerized simulation environment\n- [x] Design and semi-implement the shared storage\n  - [x] Save file\n  - [x] Read file\n  - [x] Delete file\n  - [x] List files\n- [x] Test and Benchmark\n  - [x] Run FogBed simulation without SLS and note metrics (HDD usage, CPU usage, Memory usage, etc.)\n    - [x] Design and implement measurement script.\n  - [x] Run FogBed simulation with different scenarios of using SLS\n- [x] Revise the design and implementation, if needed\n- [x] Write down the paper\n- [x] Create presentation\n- [x] Defend the dissertation\n- [ ] Enjoy the rest of your non-academic life!  \n(Is it going to check ever? I hope so!)\n\n## Assumptions and Relaxed Constraints\nFor the sake of simplicity and staying minimal, some assumptions are made by design. Here is a list of them.\n1. Files are immutable. i.e. it's not possible to rewrite a file content; instead, it should be deleted first and created back with the new contents.\n1. The order of messages (of a specific type) sent from a single source to a single destination is guaranteed.\n1. Files don't save in sub-directories but in the root of each client's (virtual) storage. i.e. it's not possible to save a file somewhere like `sub/dir/file.txt`, but `file.txt`. (See [issue #7](https://github.com/emranbm/sls-for-iot/issues/7) for more details)\n\n## Enhancement Opportunities\nThere are too many (if not infinite) cases to get optimized. Here is a memory of ones faced.\n1. **Optimize protocol:** More efficient serialization protocols can be used instead of JSON. e.g. [protobuf](https://developers.google.com/protocol-buffers)\n1. **Compress contents:** File contents can be compressed before transmission.  \nBut it should be tested whether it's worth doing computation over IO.\n1. **Optimize heartbeats:** Consider any message from clients as a heartbeat. So the client can send the heartbeats less frequently.\n1. **Don't keep content in memory:** Currently, the SDK holds file contents in memory before saving. It should also support other forms like file handles, etc.\n1. **~~Remove SLS manager~~ (Done!):** SLS manager can be omitted! Its only usage is the clients' book-keeping, which can be handled between the clients themselves. i.e. clients can subscribe for the heartbeats in a general channel and keep track of the others health.\n1. **Optimize local operations:** Don't loop back content through the network when it should be handled locally.\n1. **Disk-based `FileInfoRepo`:** Keep file infos in disk instead of memory.\n\n## Future Work\n1. Provide file overwrite.\n1. Allow using sub-directories ([#7](https://github.com/emranbm/sls-for-iot/issues/7))\n1. Add ability to divide huge files into chunks to be saved in multiple devices.\n1. Use `expireAt` field to enhance the usage of shared storage as a *cache*.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femranbm%2Fsls-for-iot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femranbm%2Fsls-for-iot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femranbm%2Fsls-for-iot/lists"}