{"id":23898929,"url":"https://github.com/bovi/nof","last_synced_at":"2026-06-10T21:32:16.168Z","repository":{"id":270418576,"uuid":"910309813","full_name":"bovi/nof","owner":"bovi","description":"The Network Operator Framework","archived":false,"fork":false,"pushed_at":"2025-02-24T06:20:33.000Z","size":175,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-13T21:03:31.145Z","etag":null,"topics":["controller","icmp","monitoring","network","snmp","tr-069"],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bovi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-12-31T00:17:33.000Z","updated_at":"2025-02-24T06:20:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"e1940b5e-f22e-4663-aade-18b2345921fa","html_url":"https://github.com/bovi/nof","commit_stats":null,"previous_names":["bovi/nof"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bovi/nof","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bovi%2Fnof","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bovi%2Fnof/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bovi%2Fnof/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bovi%2Fnof/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bovi","download_url":"https://codeload.github.com/bovi/nof/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bovi%2Fnof/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34172196,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-10T02:00:07.152Z","response_time":89,"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":["controller","icmp","monitoring","network","snmp","tr-069"],"created_at":"2025-01-04T18:14:47.624Z","updated_at":"2026-06-10T21:32:16.152Z","avatar_url":"https://github.com/bovi.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"# NOF - Network Operator Framework\n\nNOF is a framework for building network operator systems. It provides a set of tools and models\nto help you build your own network operator system.\n\n# Architecture\n\nNOF consists of four main components:\n\n- **Controller**: Central system for coordination of tasks and holding all data\n- **Executor**: Acquires tasks from the controller, executes them and reports back\n- **Dashboard**: Web interface for managing the controller\n- **Remote Dashboard**: Remote web interface for managing multiple controllers\n\nThe general architecture looks like this:\n\n```mermaid\ngraph TD;\n  Ctrl[\"Controller\"];\n  Exec[\"Executor\"];\n  Dash[\"Dashboard\"];\n  Rash[\"Remote Dashboard\"];\n\n  Exec --\u003e|results| Ctrl;\n  Ctrl --\u003e|tasks| Exec;\n  Dash --\u003e|manage| Ctrl;\n  Rash --\u003e|manage| Ctrl;\n  Ctrl --\u003e|results| Dash;\n  Ctrl --\u003e|results| Rash;\n```\n\nYet due to the restricted nature of common network systems, the NOF is designed to initiated communication\nunidirectional from the Executor to the Controller, from the Controller to the Dashboard and from\nthe Dashboard to the Remote Dashboard. Hence the communication architecture looks like this:\n\n```mermaid\ngraph TD;\n  Ctrl[\"Controller\"];\n  Exec[\"Executor\"];\n  Dash[\"Dashboard\"];\n  Rash[\"Remote Dashboard\"];\n\n  Exec --\u003e|acquire tasks| Ctrl;\n  Exec --\u003e|report results| Ctrl;\n\n  Ctrl --\u003e|report results| Dash;\n  Ctrl --\u003e|acquire config changes| Dash;\n\n  Dash --\u003e|report results| Rash;\n  Dash --\u003e|acquire config changes| Rash;\n```\n\n# System Components\n\n## Controller\n\nThe central system component to coordinate the system.\n\n### Jobs\n\nThe Controller is responsible for managing the jobs that are assigned to the Executors.\nThese jobs are derived from the Tasks, which create a relation between TaskTemplates\nand elements (e.g. Hosts).\n\n## Executor\n\nThe Executor is responsible for executing the jobs that are assigned to it.\n\n## Shell Task\n\nA Shell Task is a pure command line educated task.\n\n| Property | Type    | Description |\n|----------|---------|-------------|\n| cmd      | String  | Command to execute |\n| template | String  | Template to use for the command |\n| pattern  | String  | Pattern to use for the command |\n| interval | Integer | Interval to use for the command |\n\n### Example\n\nThe following example executes the command `echo \"Hello, World!\"` every 10 seconds\nand captures the `Hello` from the output. Afterwards it formats the output\ninto a JSON object with the key `greeting` and the value `Hello`.\n\n```json\n{\n  \"cmd\": \"echo 'Hello, World!'\",\n  \"template\": \"(?\u003cgreeting\u003eHello)\",\n  \"pattern\": \"{ 'greeting': '#{greeting}' }\",\n  \"interval\": 10\n}\n```\n\n## Dashboard\n\nThe Dashboard is a web interface for managing a single Controller.\n\n## Remote Dashboard\n\nThe Remote Dashboard is a web interface for managing multiple Controllers.\nIt behaves as a superset of the Dashboard and allows you to manage multiple\nControllers from a single interface.\n\n# Data Structures\n\n## Host\n\nA Host is a physical or virtual device in the system.\n\n| Property  | Type   | Description |\n|-----------|--------|-------------|\n| uuid      | UUID   | Unique identifier for the host |\n| hostname  | String | Human-readable name of the host |\n| ip        | String | IP address of the host |\n\n## TaskTemplate\n\nA TaskTemplate describes a task that can be executed.\n\n| Property  | Type   | Description |\n|-----------|--------|-------------|\n| uuid      | UUID   | Unique identifier for the task template |\n| type      | String | Type of the task template (e.g. \"shell\") |\n| opts      | JSON   | Options for the task template (e.g. command, interval, etc. for shell tasks) |\n\n## Task / Job\n\nA Task is an assignment of a `TaskTemplate` to a `Host`.\nA job is a task that is assigned to an executor.\n\n| Property          | Type | Description |\n|-------------------|------|-------------|\n| uuid              | UUID | Unique identifier for the task |\n| host_uuid         | UUID | UUID of the host this task belongs to |\n| tasktempalte_uuid | UUID | UUID of the task template this task is based on |\n\n## Activities\n\nActivities are a special kind of meta data model.\nIt is used to track the history of the system.\nThe system can be changed at different places and via activities we track and\nsync the changes.\n\n| Property    | Type      | Description |\n|-------------|-----------|-------------|\n| uuid        | UUID      | Unique identifier for the activity |\n| created_at  | Timestamp | When the activity was created |\n| action      | String    | Action to be performed |\n| opts        | JSON      | Options for the activity |\n| source_name | String    | Name of the source of the activity |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbovi%2Fnof","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbovi%2Fnof","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbovi%2Fnof/lists"}