{"id":23197579,"url":"https://github.com/dnoberon/heimdall","last_synced_at":"2025-08-02T14:08:48.855Z","repository":{"id":57553805,"uuid":"212234273","full_name":"DnOberon/heimdall","owner":"DnOberon","description":"Heimdall is a quick and easy way to manage and monitor short lived console applications on linux, macOS, and Windows.","archived":false,"fork":false,"pushed_at":"2019-10-19T23:28:10.000Z","size":13633,"stargazers_count":4,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-01T14:58:50.888Z","etag":null,"topics":["cli","cross-platform","filter","golang","monitor","parallel"],"latest_commit_sha":null,"homepage":"","language":"Go","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/DnOberon.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}},"created_at":"2019-10-02T01:43:17.000Z","updated_at":"2024-12-12T20:08:30.000Z","dependencies_parsed_at":"2022-09-26T18:51:04.496Z","dependency_job_id":null,"html_url":"https://github.com/DnOberon/heimdall","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"purl":"pkg:github/DnOberon/heimdall","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DnOberon%2Fheimdall","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DnOberon%2Fheimdall/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DnOberon%2Fheimdall/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DnOberon%2Fheimdall/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DnOberon","download_url":"https://codeload.github.com/DnOberon/heimdall/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DnOberon%2Fheimdall/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268401594,"owners_count":24244464,"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","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["cli","cross-platform","filter","golang","monitor","parallel"],"created_at":"2024-12-18T14:36:21.427Z","updated_at":"2025-08-02T14:08:48.808Z","avatar_url":"https://github.com/DnOberon.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":" Heimdall\n----\n[![GoDoc](https://godoc.org/github.com/DnOberon/heimdall/bifrost?status.svg)](https://godoc.org/github.com/DnOberon/heimdall/bifrost)\n\nHeimdall allows you to manage and monitor command line applications. Provided with an executable or command to run `heimdall` can perform the following operations:\n\n* Repeat the command n times\n* Run command in parallel in n instances\n* Filter and log command's output\n* Kill hung applications through user specified timeout\n\n\n\n## Install\n\n```console\ngo get github.com/dnoberon/heimdall \n```\n\nIf you want to run heimdall outside `$GOPATH/bin` make sure that `$GOPATH/bin` is [included in your \\$PATH](https://golang.org/doc/code.html#GOPATH).\nIf not, you can download  heimdall’s releases for your platform [here](https://github.com/DnOberon/heimdall/releases).\n\n## How to use `heimdall`\n\nThe easiest way to get started with heimdall after installation is to ask for its help menu.\n\n```console\n\u003e heimdall -h\n\nHeimdall gives you a quick way to monitor, repeat, and selectively\nlog a CLI application. Quick configuration options allow\nyou to effectively test and monitor a CLI application in\ndevelopment\n\nUsage:\n  heimdall [flags]\n  \nAvailable Commands:\n  help        Help about any command\n  init        Create a configuration for heimdall to replace command flag arguments\n  run         Run heimdall using the \"heimdall_config.json\" file in the current directory \n\nFlags:\n  -h, --help                help for heimdall\n  -l, --log                 Toggle logging of provided program's stdout and stderr output to file, appends if file exists\n      --logFilter string    Allows for log filtering via regex string. Use only valid with log flag\n      --logName string      Specify the log file name, defaults to heimdall.log (default \"heimdall.log\")\n      --logOverwrite        Toggle logging of provided program's stdout and stderr output to file\n  -p, --parallelCount int   Designate how many instances of your should run in parallel at one time \n  -r, --repeat int          Designate how many times to repeat your program with supplied arguments (default 1)\n  -t, --timeout duration    Designate when to kill your provided program\n  -v, --verbose             Toggle display of provided program's stdout and stderr output while heimdall runs\n\n```\n\nLet’s run through a quick example based on the problem that started sthis whole thing - a console application managing a third-party, hidden application. \n\nI want heimdall to filter the logs that both my application and the hidden one outputs as well (here we filter for \u003c and \u003e characters as long as there is at least 1 preceding character) as killing my application if it hangs.\n\nTelling heimdall to do that is easy -\n\n`heimdall --timeout=30m --log --logFilter=\u003c[^\u003c\u003e]+\u003e exportApplication`\n\n\u003c/br\u003e\n\n## Running `heimdall` with a configuration file\n\nThis tool provides the option of generating a json configuration file for ease of use. All command line flag arguments are available and represented inside the configuration file.\n\nFirst, generate your configuration file using the `heimdall init` command and following the interactive prompts.\n\n```console\n\u003e heimdall init\nExecutable path: tester\n✔ Program arguments separated by comma: █\n\n```\n\nOnce your configuration file is generated you can run heimdall with a single command -\n\n`heimdall run`\n\nYour configuration file, `heimdall_config.json` is available in the directory you first ran `heimdall init` in. To make changes you can edit this file directly or rerun `heimdall init`\n\n\u003c/br\u003e\n\n## Can't you do this with a bash or powershell script?\nYou sure could - but you'd have to spend the time to build it, have separate scripts for at least windows and linux systems, or if you're using someone else's script, modify it to the point that it's going to work for your particular situation. You'll also have to handle multi-threading and logging yourself.\n\n`heimdall` is meant to be extremely easy to use across platforms and applications by design. You shouldn't have to write some complicated scripts to achieve what `heimdall` can do with a single command.\n\n\u003c/br\u003e\n\n## More information\n\nI've written [an article](https://notyourlanguage.com/post/heimdall/) about the \"why\" of heimdall as well as stepping through source code from the earliest version.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnoberon%2Fheimdall","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdnoberon%2Fheimdall","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdnoberon%2Fheimdall/lists"}