{"id":44642998,"url":"https://github.com/intersystems/isc-perf-ui","last_synced_at":"2026-02-14T19:07:10.457Z","repository":{"id":37505297,"uuid":"472921126","full_name":"intersystems/isc-perf-ui","owner":"intersystems","description":null,"archived":false,"fork":false,"pushed_at":"2025-03-03T13:10:55.000Z","size":2894,"stargazers_count":1,"open_issues_count":8,"forks_count":3,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-03T14:24:10.226Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","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/intersystems.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","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":"2022-03-22T20:07:14.000Z","updated_at":"2025-03-03T13:11:00.000Z","dependencies_parsed_at":"2025-03-03T14:23:06.868Z","dependency_job_id":"1b47c2a3-40ed-4e22-8f1e-b74e1139c78b","html_url":"https://github.com/intersystems/isc-perf-ui","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/intersystems/isc-perf-ui","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intersystems%2Fisc-perf-ui","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intersystems%2Fisc-perf-ui/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intersystems%2Fisc-perf-ui/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intersystems%2Fisc-perf-ui/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/intersystems","download_url":"https://codeload.github.com/intersystems/isc-perf-ui/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/intersystems%2Fisc-perf-ui/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29452688,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T15:52:44.973Z","status":"ssl_error","status_checked_at":"2026-02-14T15:52:11.208Z","response_time":53,"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":[],"created_at":"2026-02-14T19:07:09.800Z","updated_at":"2026-02-14T19:07:10.446Z","avatar_url":"https://github.com/intersystems.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# isc.perf.ui\nisc.perf.ui is a simple Angular UI and accompanying REST API and WebSocket for interacting with the line-by-line monitor (otherwise accessed via `^%SYS.MONLBL`) as well as the [Test Coverage tool](https://openexchange.intersystems.com/package/Test-Coverage-Tool) and reviewing results.\n\nNote that this is appropriate for use in development/testing environments, NOT production.\n\nBeyond its intended use, this project also serves to demonstrate three other projects :\n* [isc.json](https://github.com/intersystems/isc-json)\n* [isc.rest](https://github.com/intersystems/isc-rest)\n* [isc.ipm.js](https://github.com/intersystems/isc-ipm-js)\n\n## Getting Started\nNote: a minimum platform version of InterSystems IRIS 2022.1 is required.\n\n### Installation: TestCoverage\n\nIf you want to use the TestCoverage pages, you have to set a couple of permissions.\n\n1. On the management portal for your IRIS instance, navigate to **System Administration \u003e Configuration \u003e System Configuration \u003e Local Databases**\n2. Find the row with the database that you're using for this application (it's usually USER). Find the resource in that row (usually %DB_USER). \n\n3. Then, go to **System Administration \u003e Security \u003e Users** and click on the **CSPSystem User**. Navigate to **Roles** and give the resource that you found earlier to this user. Make sure you return to General and save this change. \n\n5. Go to **System Administration \u003e Configuration \u003e Web Gateway Management \u003e System Status**. In the second table, click on the close button for the IRIS instance that you're running on. \n\n### Installation - WebSockets\n\nIf you're on Windows, you'll also have to enable WebSockets in IIS.\n\n1. Open the Windows Start menu, type \"features\" and select **Turn Windows Features on or off**.\n2. Locate **Internet Information Services \u003e World Wide Web Service \u003e Application Development \u003e WebSocket Protocol** and check the box.\n3. Click Close and wait for the features to be enabled.\n\n### Installation: IPM\n\nAs a prerequisite, you must have Node.js ^16.14.0 || ^18.10.0 installed and on the PATH. We hope to remove this requirement in the future by publishing the package with UI build artifacts included; IPM and isc.ipm.js support this, but the Open Exchange currently does not (by design).\n\nIf you already have the [ObjectScript Package Manager](https://openexchange.intersystems.com/package/ObjectScript-Package-Manager-2), installation is as easy as:\n```\nzpm \"install isc.perf.ui\"\n```\n\nIf you've done all those steps, you should be properly installed!\n\n## Notes on Security\nIf there is not public read permission on the namespace-default routine database for the namespace in which isc.perf.ui is installed, a role will be created that has read permission on that database and assigned as an application role to /csp/{namespace}/monlbl-viewer/, which provides unauthenticated access to the Angular UI. The REST API requires %Development:USE.\n\n## User Guide\nAfter installing isc.ipm.js, the package manager output will include a line like:\n```\n[isc.perf.ui]   Activate SUCCESS\nYou can view the Line-by-Line Monitor at: http://your.ip.address:52773/csp/USER/monlbl-viewer/\n```\n\nNavigate to that URL in a browser and log in with IRIS credentials on the standard IRIS login page. \n\n### Line-by-Line Monitor\n\nThe home page will show you the Line-By-Line monitor tool. \n\nThe monitor will (presumably) be stopped initially. To start the monitor, click the \"Play\" button.\n\n![Monitor Stopped](docs/images/stopped.png)\n\nSelect the routines and metrics to monitor. The wildcard syntax is the same as in `^%SYS.MONLBL`. Once selections are made, click \"Start Monitor.\"\n\n![Start Line-by-Line Monitor](docs/images/startOptions.png)\n\nOnce running, the status will update. Clicking the \"pause\" button will pause the monitor (and \"resume\" will become an option). Selecting a routine will show its data. Clicking the \"stop\" button will stop the monitor and discard counts. Clicking the \"refresh\" button will refresh the currently-displayed metrics.\n\n![Monitor Running](docs/images/running.png)\n\nWhen a routine is selected, clicking on a column header will sort by that column descending.\n\n![Routine Selected](docs/images/metric-display.png)\n\nClicking on a line of code will highlight it and jump to it in line order. Click it again to remove the highlighting.\n\n![Line highlighting in context](docs/images/highlight-in-context.png)\n\n### TestCoverage Features\n\n\n#### TestCoverage Page\n\nOn the Test Coverage page, you can select the parameters that you want to run TestCoverage on your unit tests with. \n\n![TestCoverage](docs/images/TestCoverage-Page.png)\n\nThe parameter explanations include descriptions of what each of these parameters control. You can also click into an input box to see a sample value, and there's input validation to make sure that your inputs are in a valid format.\n\nAfter you press submit, the call to run TestCoverage will begin, and you'll see live progress of your unit tests in the log at the bottom of the page. \n\n![Unit test progress](docs/images/unit-test-progress.png)\n\nAfter the tests have finished running, the dropdown select menu on the right should open with a list of routine + test path combinations, as well as the overall coverage percentage for your code and the link to the results of the unit tests themselves.\n\n![Routine and test paths](docs/images/routine-and-path-select.png)\n\nClick on any to be taken to the coverage results page for that routine under that unit test directory. \n\nHere, you can see which lines of code were covered by your unit tests according to TestCoverage. There are also additional metrics like TotalTime, which tracks the amount of time the code spent on a certain line of code from its start to finish. \n \n\n![routine results](docs/images/routine-results.png)\n\nYou can further sort in ascending or descending order by clicking on the arrows next to the headers; this is a useful way to see which lines of code take the longest. \n\n\n![routine results sorted](docs/images/routine-results-sorted.png)\n\nFinally, the Show Methods button opens up a table with the [cyclomatic complexity](https://radon.readthedocs.io/en/latest/intro.html) of each of your methods, showing which methods are the most complex and vulnerable to bugs. \n\n![complexity](docs/images/complexity-table.png)\n\n\nWhen you're done, can click the back button to go back to the launcher page. The red clear results button lets you clear all your test coverage runs.\n\n\n#### Historical Coverage Page \n\nAfter clicking on a specific past Run ID, you can view the class-level coverage results (line coverage, method coverage, timing) for all the classes in that run. This is the same data as the main results page from TestCoverage. This table is also sortable by each column. \n\n![historical results](docs/images/historical-results.png)\n\n\n## Support\nIf you find a bug or would like to request an enhancement, [report an issue](https://github.com/intersystems/isc-perf-ui/issues/new). If you have a question, feel free to post it on the [InterSystems Developer Community](https://community.intersystems.com/).\n\n## Contributing\nPlease read [contributing](https://github.com/intersystems/isc-perf-ui/blob/master/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us.\n\n## Versioning\nWe use [SemVer](http://semver.org/) for versioning. Declare your dependencies using the InterSystems package manager for the appropriate level of risk.\n\n## Authors\n* **Tim Leavitt** - *Initial implementation* - [isc-tleavitt](http://github.com/isc-tleavitt)\n* **Chris Ge** - TestCoverage features - [isc-cge](https://github.com/isc-cge)\n\nSee also the list of [contributors](https://github.com/intersystems/isc-perf-ui/graphs/contributors) who participated in this project.\n\n## License\nThis project is licensed under the MIT License - see the [LICENSE](https://github.com/intersystems/isc-perf-ui/blob/master/LICENSE) file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintersystems%2Fisc-perf-ui","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fintersystems%2Fisc-perf-ui","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fintersystems%2Fisc-perf-ui/lists"}