{"id":18733280,"url":"https://github.com/autom8ter/engine","last_synced_at":"2025-04-12T18:31:34.766Z","repository":{"id":57505873,"uuid":"176671442","full_name":"autom8ter/engine","owner":"autom8ter","description":"a plugin based grpc framework","archived":false,"fork":false,"pushed_at":"2019-05-03T05:47:15.000Z","size":19879,"stargazers_count":16,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T12:51:12.848Z","etag":null,"topics":["api","autom8ter","colemanword","framework","golang","golang-library","grpc","microservices"],"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/autom8ter.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-03-20T06:43:14.000Z","updated_at":"2022-06-18T06:38:03.000Z","dependencies_parsed_at":"2022-09-13T01:20:48.973Z","dependency_job_id":null,"html_url":"https://github.com/autom8ter/engine","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autom8ter%2Fengine","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autom8ter%2Fengine/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autom8ter%2Fengine/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/autom8ter%2Fengine/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/autom8ter","download_url":"https://codeload.github.com/autom8ter/engine/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248613473,"owners_count":21133521,"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","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":["api","autom8ter","colemanword","framework","golang","golang-library","grpc","microservices"],"created_at":"2024-11-07T15:09:16.462Z","updated_at":"2025-04-12T18:31:34.437Z","avatar_url":"https://github.com/autom8ter.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Engine\n\n[Godoc](https://github.com/autom8ter/engine/blob/master/GODOC.md)\n\nA Pluggable gRPC Microservice Framework\n               \n`go get github.com/autom8ter/engine`\n\nLicense: MIT\n\n```go\n\n//Embeded driver.PluginFunc is used to satisfy the driver.Plugin interface\ntype Example struct {\n\tdriver.PluginFunc\n}\n\n//create new example with the generated registration function from grpc\nfunc NewExample() Example {\n\te := Example{}\n\te.PluginFunc = func(s *grpc.Server) {\n\t\texamplepb.RegisterEchoServiceServer(s, e)\n\t}\n\treturn e\n}\n//examplepb methods excluded for brevity\n\nfunc main() {\n\tif err := engine.New(\"tcp\", \":8080\").With(\n\t\t//general options:\n\t\tconfig.WithDebug(),                    //adds verbose logging for development\n\t\tconfig.WithMaxConcurrentStreams(1000), //sets max concurrent server streams\n\n\t\t//plugins:\n\t\tconfig.WithChannelz(),   //adds a channelz service\n\t\tconfig.WithReflection(), //adds a reflection service\n\t\tconfig.WithHealthz(),    //adds a healthz service\n\t\tconfig.WithPlugins(examplepb.NewExample()),\n\n\t\t//unary middleware:\n\t\tconfig.WithUnaryUUIDMiddleware(),     //adds a unary uuid middleware\n\t\tconfig.WithUnaryTraceMiddleware(),    // adds a streaming opentracing middleware\n\t\tconfig.WithUnaryLoggingMiddleware(),  // adds a unary logging rmiddleware\n\t\tconfig.WithUnaryRecoveryMiddleware(), // adds a unary recovery middleware\n\n\t\t//streaming middleware\n\t\tconfig.WithStreamUUIDMiddleware(),     //adds a streaming uuid middleware\n\t\tconfig.WithStreamTraceMiddleware(),    // adds a streaming opentracing middleware\n\t\tconfig.WithStreamLoggingMiddleware(),  //adds a streaming logging middleware\n\t\tconfig.WithStreamRecoveryMiddleware(), // adds a streaming recovery middleware\n\n\t).Serve(); err != nil {\n\t\tlog.Fatalln(err.Error())\n\t}\n}\n\n```\n\nThe above engine configuration(minus the example service) can be created with:\n\n    engine.Default(network, addr string, debug bool).With(config.WithPlugins(...add plugins here))\n\n---\n\n\n## Driver\n\ngithub.com/autom8ter/engine/driver\n\ndriver.Plugin is used to register grpc server implementations.\n\n```go\n\n//Plugin is an interface for representing gRPC server implementations.\ntype Plugin interface {\n\tRegisterWithServer(*grpc.Server)\n}\n\n//PluginFunc implements the Plugin interface.\ntype PluginFunc func(*grpc.Server)\n\n//RegisterWithServer is an interface for representing gRPC server implementations.\nfunc (p PluginFunc) RegisterWithServer(s *grpc.Server) {\n\tp(s)\n}\n\n```\n\n---\n\n## Features/Scope/Roadmap\n\n- [x] Support for custom gRPC Server options\n- [x] Support for custom and chained Unary Interceptors\n- [x] Support for custom and chained Stream Interceptors\n- [x] GoDoc documentation for every exported Method\n- [x] Channelz service option ref: https://godoc.org/google.golang.org/grpc/channelz\n- [x] Reflection service option ref: https://godoc.org/google.golang.org/grpc/reflection\n- [x] Healthz service option ref: https://godoc.org/google.golang.org/grpc/health\n- [x] Unary logger middleware option\n- [x] Unary recovery middleware option\n- [x] Unary tracing middleware option\n- [x] Stream logger middleware option\n- [x] Stream recovery middleware option\n- [x] Stream tracing middleware option\n- [x] Unary metrics middleware option\n- [x] Stream metrics middleware option\n\n\n---\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautom8ter%2Fengine","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fautom8ter%2Fengine","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fautom8ter%2Fengine/lists"}