{"id":19509267,"url":"https://github.com/opentmi/opentmi","last_synced_at":"2025-04-26T03:31:52.907Z","repository":{"id":2463629,"uuid":"46608376","full_name":"OpenTMI/opentmi","owner":"OpenTMI","description":"OpenTMI (Test Management Infrastructure) Core","archived":false,"fork":false,"pushed_at":"2025-01-16T08:09:54.000Z","size":6825,"stargazers_count":22,"open_issues_count":31,"forks_count":7,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-04T07:22:54.825Z","etag":null,"topics":["addon","automation","ci","inventory-management","opentmi","resource-management","result-analysis","results-viewer","test-automation","test-management","testing"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OpenTMI.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-11-21T09:02:46.000Z","updated_at":"2025-02-18T09:58:32.000Z","dependencies_parsed_at":"2024-09-12T18:07:49.829Z","dependency_job_id":"d24de812-6ad9-4823-86b3-87adf9197be5","html_url":"https://github.com/OpenTMI/opentmi","commit_stats":null,"previous_names":[],"tags_count":23,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fopentmi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fopentmi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fopentmi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OpenTMI%2Fopentmi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OpenTMI","download_url":"https://codeload.github.com/OpenTMI/opentmi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250926823,"owners_count":21509044,"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":["addon","automation","ci","inventory-management","opentmi","resource-management","result-analysis","results-viewer","test-automation","test-management","testing"],"created_at":"2024-11-10T23:11:30.535Z","updated_at":"2025-04-26T03:31:51.790Z","avatar_url":"https://github.com/OpenTMI.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# OpenTMI\nOpen Source Test Management Infrastructure for IoT and embedded world.\n\n [![Build Status][build-image]][build-url]\n [![Test Coverage][coveralls-image]][coveralls-url]\n [![Docker][docker-image]][docker-url]\n [![ghcr][ghcr-image]][ghcr-url]\n\nOpenTMI is Open Source Test Management System. It is written in [Node.js][Node.js] and uses [MongoDB][MongoDB] as backing store. It is published in [MIT license](LICENSE.md).\nOpenTMI is extremely customizable through [addons](doc/addons.md).\n\n\n# Ideology\n\nBasic idea is to store **all** information related to test execution to database, like software under test (SUT/Build), test logs, test cases (TC), and test related resources, like DUT's. That allows then much more intelligent and more efficient way to manage testing. Also it gives very valuable information when users can directly see what is tested in individual Device with individual Build. All information is linked together and can be analyzed very deeply.\n\n## Challenges with software testing in IoT hardware\n* how to identify when test failed because of unstable HW\n* how to identify unique unstable HW in test lab\n* how to identify if certain test causes that HW's become unstable/unusable\n* how to estimate when HW start to be unstable/unusable (e.g. memory start burning out)\n* how to direct testing to right HW when there is multiple HW configurations\n* how to identify if tools deployment (e.g. new test framework revision) causes more test failures\n* how to optimize test execution time\n* how to manage all of these automatically\n\nOpenTMI try to solve these kind of challenges using \"big-data\".\n\n# Pre-requirements\n\n* [Node.js][Node.js] v12.13\u003c (tested with 12, 14 and 16, recommended to use latest LTS version)\n* [mongodb][MongoDB] v3.6\u003c (tested with 4.1.2, recommented to use latest version)\n\n# Installation\n\n## From Dockers\n\n```\ndocker pull opentmi/opentmi:latest mongo:latest\ndocker run -v \"$(pwd)\":/data --name mongo -d mongo mongod --smallfiles\ndocker run --name opentmi -p 3000:3000 --link mongo:mongo -d opentmi/opentmi\n```\n\nSee [here](doc/docker.md) for more instructions.\n\n## Clone, install dependencies and start\n\n### Prepare\n\nYou need to install [mongodb][MongoDB] and run it. File `mongod.sh` contains simple script to start single\nmongod instance (db location ./db and logs ./db.logs) - that is not recommended for production usage.\n\n```\n\u003e git clone --recursive https://github.com/OpenTMI/opentmi\n\u003e cd opentmi\n\u003e npm install\n\u003e npm start\n\nor start without clustered mode\n\n\u003e node app\n```\n\n**Note:** Installation install also all addons dependencies so you doesn't need to worry about it.\n\n# Command line\n\n```\n$ npm start -- -h\nUsage: npm start -- (options)\n\nOptions:\n  --listen, -l            set binding interface                         [string]\n  --https                 use https\n  --port                  set listen port\n  --verbose, -v           verbose level                                  [count]\n  --silent, -s            Silent mode\n  --log                   log path. Use \"null\" or \"/dev/null\" to supress file\n                          logging                                       [string]\n  --autoInstallAddonDeps  automatically install dependencies when startup server\n                                                                 [default: true]\n  --config, -c            config file          [string] [default: \"config.json\"]\n  --db                    mongodb connection string                     [string]\n  --auto-reload, -r       Automatically restart workers when changes detected in\n                          server directory\n```\n\n**db:**\n* `inmemory` as connection string uses in-memory mongodb server - for testing purpose.\n\n**https:**\nGenerate self-signed ssl certifications:\n* `./scripts/gencerts.sh`\n* start daemon with `--https` -options (`npm start -- -https`)\n\n**NOTE:** Not recommended to use self-signed certificates in production usage!\n\n## Clustered mode\n\nOpenTMI support [clustered mode](doc/cluster.md) which gives some benefits in production environment:\n* better performance\n* zero downtime when updating\n* auto restart on failure\n* serve more clients\n* better performance\n\n**NOTE** same can be achieved using load-balancer and systemd service for example.\nIn such case you doesn't need to use cluster mode.\n\n## API documentation\nAvailable [here](doc/APIs)\n\n## Configuration\n\nBy default opentmi is started as development mode. You can configure environment using [`--config \u003cfile\u003e`](`config.example.json`) -option.\n\n**note**:\n* `\"mongo\"` options overwrites defaults and is pypassed to [MongoClient](http://mongodb.github.io/node-mongodb-native/3.0/api/MongoClient.html).\n* `\"smtp\"` options is pypassed to [nodemailer](https://nodemailer.com/smtp/) transport configurations. To activate smpt use `enabled` property.\n\n# Architecture\n\n* **Backend** (this repository)\n    which provide [RESTFull json and websockets (through socketIO) -API](doc/APIs), internal [load balancer](doc/cluster.md) and auto restart on failure etc....\n* **Frontends**\n  * [default web GUI as addon](https://github.com/opentmi/opentmi-default-gui)\n  * [admin gui as addon](https://github.com/opentmi/opentmi-adminui)\n* **Client libraries/tools**\n  * [opentmi-pyclient](https://github.com/opentmi/opentmi-pyclient)\n  * [opentmi-jsclient](https://github.com/opentmi/opentmi-jsclient) for nodejs / browser\n  * [opentmi-cli](https://github.com/opentmi/opentmi-cli)\n  * [pytest-opentmi](https://github.com/opentmi/pytest-opentmi)\n\n### Addons\nWay to extend backend-service functionality. Addon registry (future plan) contains information\nabout existing addons, which can easily to install via administrator API.\nMore documentation can be found from [here](doc/addons.md)\n\n### Test\n\n`npm test`\n\n### Contribution guidelines\n\n* Writing tests\n* Code review\n* Other guidelines\n\nSee [code-of-conduct](CODE_OF_CONDUCT.md)\n\n### Production usage\n\nPropose to use some service management tool which can restart service if it for some reason crashes.\n\nYou can use for example:\n* [supervisor](https://github.com/petruisfan/node-supervisor)\n\n    `supervisor -wa . -n exit server.js`\n\n* [pm2](https://github.com/Unitech/pm2)\n\n    `pm2 start --name opentmi index.js -- -vvv`\n\n* linux [systemd](https://www.freedesktop.org/wiki/Software/systemd/)\n\n    see [example](scripts/opentmi.service) service script\n\n **Note:** if your service management is storing `stdout` and `stderr` to log\n files - be sure that it is rotated properly to ensure that disk space doesn't\n cause trouble. By default OpenTMI store logs under `log/` -folder, configured as\n daily rotate.\n\n### Who do I talk to?\n\n* Repo owner or admin\n* Other community or team contact\n\n## License\n\n  [MIT](LICENSE.md)\n\n\u003c!-- references --\u003e\n[Node.js]: https://nodejs.com\n[MongoDB]: https://mongodb.com\n\n[build-image]: https://github.com/OpenTMI/opentmi/actions/workflows/push.yml/badge.svg?branch=master\u0026event=push\n[build-url]: https://github.com/OpenTMI/opentmi/actions/workflows/push.yml\n[coveralls-image]: https://coveralls.io/repos/OpenTMI/opentmi/badge.svg?branch=master\u0026service=github\n[coveralls-url]: https://coveralls.io/github/OpenTMI/opentmi?branch=master\n[docker-image]: https://img.shields.io/docker/cloud/build/opentmi/opentmi?label=Docker\u0026style=flat\n[docker-url]: https://hub.docker.com/r/opentmi/opentmi/builds\n[ghcr-image]: https://img.shields.io/badge/ghcr-image-green\n[ghcr-url]: https://github.com/OpenTMI/opentmi/pkgs/container/opentmi\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentmi%2Fopentmi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopentmi%2Fopentmi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopentmi%2Fopentmi/lists"}