{"id":32802707,"url":"https://github.com/karnerth/qlookout","last_synced_at":"2026-04-16T01:32:32.170Z","repository":{"id":209341640,"uuid":"618843562","full_name":"KarnerTh/qlookout","owner":"KarnerTh","description":"Monitor you database content","archived":false,"fork":false,"pushed_at":"2023-12-02T19:24:18.000Z","size":674,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-06T07:04:48.022Z","etag":null,"topics":["alerting","database","monitoring","tool"],"latest_commit_sha":null,"homepage":"","language":"Go","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/KarnerTh.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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}},"created_at":"2023-03-25T14:16:13.000Z","updated_at":"2025-06-29T12:59:27.000Z","dependencies_parsed_at":"2023-12-01T14:42:08.500Z","dependency_job_id":null,"html_url":"https://github.com/KarnerTh/qlookout","commit_stats":null,"previous_names":["karnerth/query-lookout"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/KarnerTh/qlookout","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarnerTh%2Fqlookout","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarnerTh%2Fqlookout/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarnerTh%2Fqlookout/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarnerTh%2Fqlookout/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KarnerTh","download_url":"https://codeload.github.com/KarnerTh/qlookout/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KarnerTh%2Fqlookout/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31867710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-15T15:24:51.572Z","status":"ssl_error","status_checked_at":"2026-04-15T15:24:39.138Z","response_time":63,"last_error":"SSL_read: 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":["alerting","database","monitoring","tool"],"created_at":"2025-11-06T07:02:23.477Z","updated_at":"2026-04-16T01:32:32.154Z","avatar_url":"https://github.com/KarnerTh.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/KarnerTh/qlookout/assets/22556363/1057ff28-c90e-4013-b09a-9a03f86a5860\" alt=\"Query-Lookout logo\"/\u003e\n\u003c/p\u003e\n\n# Query-Lookout\n\u003e ⚠️ Project is under development - features and apis are subject to change\n\nQuery Lookout is a small and simple tool designed to simplify and enhance\nthe way you monitor and manage your database content. As data grows in\ncomplexity and volume, keeping a vigilant eye on changes becomes crucial.\nQuery-Lookout allows you to define rules, alerting you to relevant\nmodifications or data constellations in your database.\n\n\nWant to see what has changed? Take a look at\nthe [Changelog](https://github.com/KarnerTh/qlookout/blob/main/CHANGELOG.md)\n\n## How does it work \n1. Create a new **lookout**\n    1. Define a display name\n    1. Configure a cron expression how often it should run (details [here](https://github.com/robfig/cron#background---cron-spec-format))\n    1. Define the SQL query that should be run\n    1. Configure desired notification channels (in app notification is on by default)\n1. Define one or more **rules** that validate the result of the lookout\n    1. Column that should be checked\n    1. Row from which the value should be used (counting starts with `0`)\n    1. Column type (text, int, float)\n    1. Rule type (exact value, should be null, greater/less than, between)\n    1. Expected value\n\n\nhttps://github.com/KarnerTh/qlookout/assets/22556363/e9d9c451-ba07-4eaf-908a-80a1a1c2b174\n\n\n\n# Contents\n\u003cul\u003e\n  \u003cli\u003e\u003ca href=\"#features\"\u003eFeatures\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#getting-started\"\u003eGetting started\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#installation\"\u003eInstallation\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#supported-databases\"\u003eSupported databases\u003c/a\u003e\u003c/li\u003e\n  \u003cli\u003e\u003ca href=\"#configuration\"\u003eConfiguration\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\n# Features\n- **Rule-based Monitoring:**\nCreate customizable rules to monitor specific changes or data constellations\nin your database. Define conditions that matter most to you and receive\ntimely alerts when those conditions are met.\n\n- **Alert Notifications:**\nReceive notifications in real-time through various channels, such as email,\nin app notifications or local notifications (more coming). Stay informed\nabout important updates without the need to constantly check the database.\n\n- **Easy Configuration:**\nSet up rules effortlessly with an intuitive configuration interface.\nNo need for complex queries or scripts – Query Lookout streamlines the\nprocess, making monitoring accessible to everyone.\n\n- **Database Compatibility:**\nQuery Lookout supports a wide range of databases, ensuring flexibility and\ncompatibility with popular database management systems.\n\n- **Single Binary:**\nEverything you need in one single binary - the core and web ui.\nGet up and running in a few steps - locally or whereever you want.\n\n## Getting started\n1. Install query-lookout (details [here](#installation))\n1. Create the configuration file `~/.qlookout` (details [here](#configuration))\n    1. Important config is `data_source`, which defines the connection string\n    to your database\n1. Run `qlookout`\n1. Open [http://localhost:63000/](http://localhost:63000/)\n1. Enjoy\n\n## Installation\n```sh\ngo install github.com/KarnerTh/qlookout@main\n```\n\nor via docker\n\n```sh\ndocker run \\\n    --network=\"\"               `# if you want to access another docker container` \\\n    -v qlookout_data:/root     `# if you want to persist your data` \\\n    -e QL_DATA_SOURCE=\"\"       `# the datasource which you want to query` \\\n    -p 63000:63000             `# port for the ui` \\\n    -p 63001:63001             `# port for the core` \\\n    ghcr.io/karnerth/qlookout:latest\n```\n\n\n## Supported databases\n| Database   | Example Connection-String                                  |\n| ---------- | ---------------------------------------------------------- |\n| SQLite3    | `sqlite3://your-file.db`                                   |\n| PostgreSQL | `postgresql://user:password@localhost:5432/yourDb`         |\n| MySQL      | `mysql://root:password@tcp(127.0.0.1:3306)/yourDb`         |\n| MSSQL      | `sqlserver://user:password@localhost:1433?database=yourDb` |\n\n## Configuration\n```\n# required\ndata_source             The data source for the lookouts\n\n# mail config\nmail_from_address       From which mail address the notifcation mails are sent\nmail_to_address         To which mail addresses notifcations are sent (multiple addresses separated by comma)\nmail_smtp_host          SMTP host\nmail_smtp_port          SMTP port\nmail_username           SMTP username\nmail_password           SMTP password\n\n# optional\nlog_level               Log level of the core (error, warn, info, debug)\ndatabase_file           The file that is used for the internal sqlite database (defaults to `data.db` in your home directory)\nbase_url                Base url of the application (e.g. for the notification deeplink)\n```\n\nThe configs are loaded in that order (details can be found [here](https://github.com/spf13/viper#why-viper))\n\n- as environment variables with a `QL_` prefix in ALL_CAPS\n- a yaml configuration file located in `~/.qlookout`\n\n### Example config file\n```yaml\nlog_level: INFO\ndatabase_file: \"custom_file_name.db\"\ndata_source: \"sqlite3://data.db\"\nbase_url: \"https://karnerth.github.io/portfolio/\"\nmail_from_address: \"test@works.at\"\nmail_to_address: \"first@works.at,second@works.at\"\nmail_smtp_host: \"localhost\"\nmail_smtp_port: \"1025\"\nmail_username: \"your@mail.net\"\nmail_password: \"superSecret1\"\n```\n\n### Example environment variables\n```bash\nexport QL_LOG_LEVEL=\"INFO\"\nexport QL_DATABASE_FILE=\"custom_file_name.db\"\nexport QL_DATA_SOURCE=\"sqlite3://data.db\"\nexport QL_BASE_URL=\"https://karnerth.github.io/portfolio/\"\nexport QL_MAIL_FROM_ADDRESS=\"test@works.at\"\nexport QL_MAIL_TO_ADDRESS=\"first@works.at,second@works.at\"\nexport QL_MAIL_SMTP_HOST=\"localhost\"\nexport QL_MAIL_SMTP_PORT=\"1025\"\nexport QL_MAIL_USERNAME=\"your@mail.net\"\nexport QL_MAIL_PASSWORD=\"superSecret1\"\n```\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarnerth%2Fqlookout","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkarnerth%2Fqlookout","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkarnerth%2Fqlookout/lists"}