{"id":18552438,"url":"https://github.com/andrejewski/odn","last_synced_at":"2026-01-25T15:03:26.284Z","repository":{"id":57313509,"uuid":"71027732","full_name":"andrejewski/odn","owner":"andrejewski","description":"Ops Defined Network","archived":false,"fork":false,"pushed_at":"2016-10-16T05:16:53.000Z","size":2,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-09T12:44:16.762Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"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/andrejewski.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}},"created_at":"2016-10-16T03:22:26.000Z","updated_at":"2019-03-28T16:36:42.000Z","dependencies_parsed_at":"2022-09-20T23:30:47.708Z","dependency_job_id":null,"html_url":"https://github.com/andrejewski/odn","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/andrejewski/odn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fodn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fodn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fodn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fodn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andrejewski","download_url":"https://codeload.github.com/andrejewski/odn/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andrejewski%2Fodn/sbom","scorecard":{"id":192828,"data":{"date":"2025-08-11","repo":{"name":"github.com/andrejewski/odn","commit":"6f282aa06925c160e4a9a446819a2d716bc67537"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Code-Review","score":0,"reason":"Found 0/2 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":0,"reason":"license file not detected","details":["Warn: project does not have a license file"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}}]},"last_synced_at":"2025-08-16T21:08:55.047Z","repository_id":57313509,"created_at":"2025-08-16T21:08:55.047Z","updated_at":"2025-08-16T21:08:55.047Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28754807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T13:59:49.818Z","status":"ssl_error","status_checked_at":"2026-01-25T13:59:33.728Z","response_time":113,"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":[],"created_at":"2024-11-06T21:14:13.392Z","updated_at":"2026-01-25T15:03:26.267Z","avatar_url":"https://github.com/andrejewski.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Ops Defined Network\nOps Defined Network (ODN, pronounced */o-den/*) is a library and toolkit for building adaptive distributed services. If you are familiar with Netflix's [Hystrix project](https://github.com/Netflix/Hystrix), then all you need to know is ODN was originally pitched as \"Hystrix on steroids.\" Otherwise, this document aims to explain everything you need to know about ODN: when, why, and how to use it with your applications.\n\n## What is an Ops Defined Network?\nI made it up. An ops defined network is a network where the applications, their relationships, and their behaviors dictate the shape and behavior of the entire network. ODN is similar to a Software Defined Network (SDN), but instead of manipulating the physical routers and switches of a network ODNs control and manipulate at the application and service level of a network.\n\n## When to use ODN?\nODN is not for everyone. Very few organizations have a distributed service infrastructure large enough to justify the use of an ODN. A large distributed service architecture suitable for ODN has tens to hundreds of interconnected (micro-)services, most of which require multiple machines running in multiple data centers for resiliency. If this does not sound like you, please do not use ODN. Of course, think of ODN when the time does hopefully come.\n\n## Why to use ODN?\nHere is a sampling of the potential functions offered by ODNs.\n\n### Feature toggles and remote configuration\nProduction systems which continually add new features will initially place new features behind one or many feature toggles which allow these features to be turned on and off at whim, remotely and anytime in the future. These toggles effect service behavior. ODN provides a broader mechanism for feature toggles called remote configuration: passing parameters to relevant services which modify their behaviors. These parameters can be anything, not just boolean flags, and can be changed in real-time based on not just the single service but the entire network state.\n\n### Scaling for Service Level Agreements\nA Service Level Agreement (SLA) is contract between a service provider and the customer using the service which defines the guarantees of the system that the provider must maintain in order to avoid the consequence stipulated in the contract. Extensive monitoring of up-times, performance, throughput, and other such metrics are needed to analyze whether a SLA is being upheld and if it isn't it is a huge problem. ODN, given minimums and maximums of each metric defined in an SLA, can automatically evaluate whether the system is in compliance and, if not, actively scale the relevant services to meet expectations. This includes reconciling multiple SLAs for the same services, the addition of new SLAs, and removal of expired SLAs.\n\n### Cascading failure adaption\nIf a service has multiple dependencies, those dependencies may also have their own dependencies, and so on forming large trees and chains that are characteristic of almost any distributed services architecture. Currently, tools like Hystrix can help us deal with dependency chain failures using a circuit-breaker construct where each link in the chain eventually discovers its dependency's failure and automatically fails itself. ODN lets us do much better: instead of each service having to discover things about its own dependencies, a failed dependency emits a failure to ODN and ODN can put every service along the relevant chains into proper failure modes in real-time with no trial-and-error work.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejewski%2Fodn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandrejewski%2Fodn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandrejewski%2Fodn/lists"}