mirkoify, godepify
diff --git a/Gopkg.lock b/Gopkg.lock
new file mode 100644
index 0000000..ab31c34
--- /dev/null
+++ b/Gopkg.lock
@@ -0,0 +1,198 @@
+# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
+
+
+[[projects]]
+ branch = "master"
+ digest = "1:2af0bc306f77bef606f6f6033652f0de3cc80e77008f4da52197b4b0a6be5853"
+ name = "code.hackerspace.pl/q3k/hspki"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "624295da664fea57a1e3bd8cee639ae04f4c0ccf"
+
+[[projects]]
+ branch = "master"
+ digest = "1:48353f64f7cc9626e4396b286552812a40a9c1d3e653d51ecbe6cedf2c4f4778"
+ name = "code.hackerspace.pl/q3k/mirko"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "b21f9b9a2ec6ada755aac41595acdf1961d3c48d"
+
+[[projects]]
+ digest = "1:e92f5581902c345eb4ceffdcd4a854fb8f73cf436d47d837d1ec98ef1fe0a214"
+ name = "github.com/StackExchange/wmi"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "5d049714c4a64225c3c79a7cf7d02f7fb5b96338"
+ version = "1.0.0"
+
+[[projects]]
+ digest = "1:64a5a67c69b70c2420e607a8545d674a23778ed9c3e80607bfd17b77c6c87f6a"
+ name = "github.com/go-ole/go-ole"
+ packages = [
+ ".",
+ "oleutil",
+ ]
+ pruneopts = "UT"
+ revision = "a41e3c4b706f6ae8dfbff342b06e40fa4d2d0506"
+ version = "v1.2.1"
+
+[[projects]]
+ branch = "master"
+ digest = "1:1ba1d79f2810270045c328ae5d674321db34e3aae468eb4233883b473c5c0467"
+ name = "github.com/golang/glog"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "23def4e6c14b4da8ac2ed8007337bc5eb5007998"
+
+[[projects]]
+ digest = "1:5d1b5a25486fc7d4e133646d834f6fca7ba1cef9903d40e7aa786c41b89e9e91"
+ name = "github.com/golang/protobuf"
+ packages = [
+ "proto",
+ "protoc-gen-go/descriptor",
+ "ptypes",
+ "ptypes/any",
+ "ptypes/duration",
+ "ptypes/timestamp",
+ ]
+ pruneopts = "UT"
+ revision = "aa810b61a9c79d51363740d207bb46cf8e620ed5"
+ version = "v1.2.0"
+
+[[projects]]
+ branch = "master"
+ digest = "1:a7cc4447e0c2432f217fd2bed937c100ec475272a7a9306477170c2934297357"
+ name = "github.com/q3k/statusz"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "924f04ea71149b75f5b10f426cc4c39d6d90f6f2"
+
+[[projects]]
+ branch = "master"
+ digest = "1:8f042d4b4c48d38d7a1201096299bd26d044c97c032ab20ee171fe5b0d201d2e"
+ name = "github.com/shirou/gopsutil"
+ packages = [
+ "internal/common",
+ "load",
+ ]
+ pruneopts = "UT"
+ revision = "a11c78ba2c13c5b1ee59c53296ba35f92f0ce658"
+
+[[projects]]
+ digest = "1:564b31f09a21367ada5b019d8413afe99cf770775606f94c7bef42b2ef79dfdf"
+ name = "github.com/ybbus/jsonrpc"
+ packages = ["."]
+ pruneopts = "UT"
+ revision = "dd866631e904a5df2067d934985c5def68f391ac"
+ version = "v2.1.2"
+
+[[projects]]
+ branch = "master"
+ digest = "1:505dbee0833715a72a529bb57c354826ad42a4496fad787fa143699b4de1a6d0"
+ name = "golang.org/x/net"
+ packages = [
+ "context",
+ "http/httpguts",
+ "http2",
+ "http2/hpack",
+ "idna",
+ "internal/timeseries",
+ "trace",
+ ]
+ pruneopts = "UT"
+ revision = "49bb7cea24b1df9410e1712aa6433dae904ff66a"
+
+[[projects]]
+ branch = "master"
+ digest = "1:f5aa274a0377f85735edc7fedfb0811d3cbc20af91633797cb359e29c3272271"
+ name = "golang.org/x/sys"
+ packages = [
+ "unix",
+ "windows",
+ ]
+ pruneopts = "UT"
+ revision = "fa43e7bc11baaae89f3f902b2b4d832b68234844"
+
+[[projects]]
+ digest = "1:a2ab62866c75542dd18d2b069fec854577a20211d7c0ea6ae746072a1dccdd18"
+ name = "golang.org/x/text"
+ packages = [
+ "collate",
+ "collate/build",
+ "internal/colltab",
+ "internal/gen",
+ "internal/tag",
+ "internal/triegen",
+ "internal/ucd",
+ "language",
+ "secure/bidirule",
+ "transform",
+ "unicode/bidi",
+ "unicode/cldr",
+ "unicode/norm",
+ "unicode/rangetable",
+ ]
+ pruneopts = "UT"
+ revision = "f21a4dfb5e38f5895301dc265a8def02365cc3d0"
+ version = "v0.3.0"
+
+[[projects]]
+ branch = "master"
+ digest = "1:56b0bca90b7e5d1facf5fbdacba23e4e0ce069d25381b8e2f70ef1e7ebfb9c1a"
+ name = "google.golang.org/genproto"
+ packages = ["googleapis/rpc/status"]
+ pruneopts = "UT"
+ revision = "af9cb2a35e7f169ec875002c1829c9b315cddc04"
+
+[[projects]]
+ digest = "1:dc0c170b110c22d9a4eccf08ab58490608053eac450bf456f3aaf9b30a668781"
+ name = "google.golang.org/grpc"
+ packages = [
+ ".",
+ "balancer",
+ "balancer/base",
+ "balancer/roundrobin",
+ "codes",
+ "connectivity",
+ "credentials",
+ "encoding",
+ "encoding/proto",
+ "grpclog",
+ "internal",
+ "internal/backoff",
+ "internal/channelz",
+ "internal/envconfig",
+ "internal/grpcrand",
+ "internal/transport",
+ "keepalive",
+ "metadata",
+ "naming",
+ "peer",
+ "reflection",
+ "reflection/grpc_reflection_v1alpha",
+ "resolver",
+ "resolver/dns",
+ "resolver/passthrough",
+ "stats",
+ "status",
+ "tap",
+ ]
+ pruneopts = "UT"
+ revision = "8dea3dc473e90c8179e519d91302d0597c0ca1d1"
+ version = "v1.15.0"
+
+[solve-meta]
+ analyzer-name = "dep"
+ analyzer-version = 1
+ input-imports = [
+ "code.hackerspace.pl/q3k/mirko",
+ "github.com/golang/glog",
+ "github.com/golang/protobuf/proto",
+ "github.com/ybbus/jsonrpc",
+ "golang.org/x/net/context",
+ "google.golang.org/grpc",
+ "google.golang.org/grpc/codes",
+ "google.golang.org/grpc/status",
+ ]
+ solver-name = "gps-cdcl"
+ solver-version = 1
diff --git a/Gopkg.toml b/Gopkg.toml
new file mode 100644
index 0000000..749416d
--- /dev/null
+++ b/Gopkg.toml
@@ -0,0 +1,54 @@
+# Gopkg.toml example
+#
+# Refer to https://golang.github.io/dep/docs/Gopkg.toml.html
+# for detailed Gopkg.toml documentation.
+#
+# required = ["github.com/user/thing/cmd/thing"]
+# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
+#
+# [[constraint]]
+# name = "github.com/user/project"
+# version = "1.0.0"
+#
+# [[constraint]]
+# name = "github.com/user/project2"
+# branch = "dev"
+# source = "github.com/myfork/project2"
+#
+# [[override]]
+# name = "github.com/x/y"
+# version = "2.4.0"
+#
+# [prune]
+# non-go = false
+# go-tests = true
+# unused-packages = true
+
+
+[[constraint]]
+ branch = "master"
+ name = "code.hackerspace.pl/q3k/mirko"
+
+[[constraint]]
+ branch = "master"
+ name = "github.com/golang/glog"
+
+[[constraint]]
+ name = "github.com/golang/protobuf"
+ version = "1.2.0"
+
+[[constraint]]
+ name = "github.com/ybbus/jsonrpc"
+ version = "2.1.2"
+
+[[constraint]]
+ branch = "master"
+ name = "golang.org/x/net"
+
+[[constraint]]
+ name = "google.golang.org/grpc"
+ version = "1.15.0"
+
+[prune]
+ go-tests = true
+ unused-packages = true
diff --git a/grpc.go b/grpc.go
deleted file mode 100644
index 01d5634..0000000
--- a/grpc.go
+++ /dev/null
@@ -1,122 +0,0 @@
-package main
-
-import (
- "context"
- "fmt"
- "net"
- "net/http"
-
- "code.hackerspace.pl/q3k/hspki"
- "github.com/golang/glog"
- "github.com/q3k/statusz"
- "golang.org/x/net/trace"
- "google.golang.org/grpc"
- "google.golang.org/grpc/reflection"
-
- pb "code.hackerspace.pl/q3k/arista-proxy/proto"
-)
-
-type serverOpts struct {
- listenAddress string
- debugAddress string
- tlsCAPath string
- tlsCertificatePath string
- tlsKeyPath string
-}
-
-type server struct {
- arista *aristaClient
- opts *serverOpts
-
- grpc struct {
- listen net.Listener
- server *grpc.Server
- }
- http struct {
- listen net.Listener
- server *http.Server
- }
-}
-
-func newServer(opts *serverOpts, arista *aristaClient) (*server, error) {
- return &server{
- opts: opts,
- arista: arista,
- }, nil
-}
-
-func (s *server) trace(ctx context.Context, f string, args ...interface{}) {
- tr, ok := trace.FromContext(ctx)
- if !ok {
- fmtd := fmt.Sprintf(f, args...)
- glog.Warningf("No trace in %v: %s", ctx, fmtd)
- return
- }
- tr.LazyPrintf(f, args...)
-}
-
-func (s *server) setupGRPC(options ...grpc.ServerOption) error {
- lis, err := net.Listen("tcp", s.opts.listenAddress)
- if err != nil {
- return fmt.Errorf("while listening on main port: %v", err)
- }
-
- s.grpc.listen = lis
- s.grpc.server = grpc.NewServer(options...)
-
- return nil
-}
-
-func (s *server) setupDebugHTTP(mux http.Handler) error {
- lis, err := net.Listen("tcp", s.opts.debugAddress)
- if err != nil {
- return fmt.Errorf("while listening on main port: %v", err)
- }
-
- s.http.listen = lis
- s.http.server = &http.Server{
- Addr: s.opts.debugAddress,
- Handler: mux,
- }
-
- return nil
-}
-
-func (s *server) serveForever() {
- grpc.EnableTracing = true
-
- if err := s.setupGRPC(hspki.WithServerHSPKI()...); err != nil {
- glog.Exitf("Could not setup GRPC server: %v", err)
- }
- pb.RegisterAristaProxyServer(s.grpc.server, s)
- reflection.Register(s.grpc.server)
-
- go func() {
- if err := s.grpc.server.Serve(s.grpc.listen); err != nil {
- glog.Exitf("Could not start GRPC server: %v", err)
- }
- }()
- glog.Infof("Listening for GRPC on %v", s.opts.listenAddress)
-
- if s.opts.debugAddress == "" {
- glog.Info("Disabling debug HTTP server")
- } else {
- httpMux := http.NewServeMux()
- httpMux.HandleFunc("/debug/status", statusz.StatusHandler)
- httpMux.HandleFunc("/debug/requests", trace.Traces)
- httpMux.HandleFunc("/", statusz.StatusHandler)
-
- if err := s.setupDebugHTTP(httpMux); err != nil {
- glog.Exitf("Could not setup HTTP server: %v", err)
- }
-
- go func() {
- if err := s.http.server.Serve(s.http.listen); err != nil {
- glog.Exitf("Could not start HTTP server: %v", err)
- }
- }()
- glog.Infof("Listening for HTTP on %v", s.opts.debugAddress)
- }
-
- select {}
-}
diff --git a/main.go b/main.go
index 66e8d94..f417f1f 100644
--- a/main.go
+++ b/main.go
@@ -4,17 +4,15 @@
"flag"
"fmt"
+ "code.hackerspace.pl/q3k/mirko"
"github.com/golang/glog"
"github.com/ybbus/jsonrpc"
+
+ pb "code.hackerspace.pl/q3k/arista-proxy/proto"
)
var (
- flagAristaAPI string
- flagListenAddress string
- flagDebugAddress string
- flagCAPath string
- flagCertificatePath string
- flagKeyPath string
+ flagAristaAPI string
)
type aristaClient struct {
@@ -39,32 +37,31 @@
return nil
}
+type server struct {
+ arista *aristaClient
+}
+
func main() {
flag.StringVar(&flagAristaAPI, "arista_api", "http://admin:password@1.2.3.4:80/command-api", "Arista remote endpoint")
- flag.StringVar(&flagListenAddress, "listen_address", "127.0.0.1:42000", "gRPC listen address")
- flag.StringVar(&flagDebugAddress, "debug_address", "127.0.0.1:42001", "Debug HTTP listen address, or empty to disable")
- flag.StringVar(&flagCAPath, "tls_ca_path", "pki/ca.pem", "Path to PKI CA certificate")
- flag.StringVar(&flagCertificatePath, "tls_certificate_path", "pki/service.pem", "Path to PKI service certificate")
- flag.StringVar(&flagKeyPath, "tls_key_path", "pki/service-key.pem", "Path to PKI service private key")
- flag.Set("logtostderr", "true")
flag.Parse()
arista := &aristaClient{
rpc: jsonrpc.NewClient(flagAristaAPI),
}
- opts := &serverOpts{
- listenAddress: flagListenAddress,
- debugAddress: flagDebugAddress,
- tlsCAPath: flagCAPath,
- tlsCertificatePath: flagCertificatePath,
- tlsKeyPath: flagKeyPath,
- }
- server, err := newServer(opts, arista)
- if err != nil {
- glog.Errorf("Could not create server: %v", err)
+ m := mirko.New()
+ if err := m.Listen(); err != nil {
+ glog.Exitf("Listen(): %v", err)
}
- glog.Info("Starting up...")
- server.serveForever()
+ s := &server{
+ arista: arista,
+ }
+ pb.RegisterAristaProxyServer(m.GRPC(), s)
+
+ if err := m.Serve(); err != nil {
+ glog.Exitf("Serve(): %v", err)
+ }
+
+ select {}
}