summaryrefslogtreecommitdiff
path: root/interfaces
diff options
context:
space:
mode:
Diffstat (limited to 'interfaces')
-rw-r--r--interfaces/log/interface.go16
-rw-r--r--interfaces/log/zap_adapter.go56
-rw-r--r--interfaces/metrics/interface.go9
-rw-r--r--interfaces/rpc/interface.go7
-rw-r--r--interfaces/server/interface.go17
5 files changed, 105 insertions, 0 deletions
diff --git a/interfaces/log/interface.go b/interfaces/log/interface.go
new file mode 100644
index 00000000..e2f2ce31
--- /dev/null
+++ b/interfaces/log/interface.go
@@ -0,0 +1,16 @@
+package log
+
+type (
+ // Logger is an general RR log interface
+ Logger interface {
+ Debug(msg string, keyvals ...interface{})
+ Info(msg string, keyvals ...interface{})
+ Warn(msg string, keyvals ...interface{})
+ Error(msg string, keyvals ...interface{})
+ }
+)
+
+// With creates a child logger and adds structured context to it
+type WithLogger interface {
+ With(keyvals ...interface{}) Logger
+}
diff --git a/interfaces/log/zap_adapter.go b/interfaces/log/zap_adapter.go
new file mode 100644
index 00000000..65f8d04b
--- /dev/null
+++ b/interfaces/log/zap_adapter.go
@@ -0,0 +1,56 @@
+package log
+
+import (
+ "fmt"
+
+ "go.uber.org/zap"
+)
+
+type ZapAdapter struct {
+ zl *zap.Logger
+}
+
+// Create NewZapAdapter which uses general log interface
+func NewZapAdapter(zapLogger *zap.Logger) *ZapAdapter {
+ return &ZapAdapter{
+ zl: zapLogger.WithOptions(zap.AddCallerSkip(1)),
+ }
+}
+
+func (log *ZapAdapter) fields(keyvals []interface{}) []zap.Field {
+ // we should have even number of keys and values
+ if len(keyvals)%2 != 0 {
+ return []zap.Field{zap.Error(fmt.Errorf("odd number of keyvals pairs: %v", keyvals))}
+ }
+
+ var fields []zap.Field
+ for i := 0; i < len(keyvals); i += 2 {
+ key, ok := keyvals[i].(string)
+ if !ok {
+ key = fmt.Sprintf("%v", keyvals[i])
+ }
+ fields = append(fields, zap.Any(key, keyvals[i+1]))
+ }
+
+ return fields
+}
+
+func (log *ZapAdapter) Debug(msg string, keyvals ...interface{}) {
+ log.zl.Debug(msg, log.fields(keyvals)...)
+}
+
+func (log *ZapAdapter) Info(msg string, keyvals ...interface{}) {
+ log.zl.Info(msg, log.fields(keyvals)...)
+}
+
+func (log *ZapAdapter) Warn(msg string, keyvals ...interface{}) {
+ log.zl.Warn(msg, log.fields(keyvals)...)
+}
+
+func (log *ZapAdapter) Error(msg string, keyvals ...interface{}) {
+ log.zl.Error(msg, log.fields(keyvals)...)
+}
+
+func (log *ZapAdapter) With(keyvals ...interface{}) Logger {
+ return NewZapAdapter(log.zl.With(log.fields(keyvals)...))
+}
diff --git a/interfaces/metrics/interface.go b/interfaces/metrics/interface.go
new file mode 100644
index 00000000..505c3d7b
--- /dev/null
+++ b/interfaces/metrics/interface.go
@@ -0,0 +1,9 @@
+package metrics
+
+import (
+ "github.com/prometheus/client_golang/prometheus"
+)
+
+type StatProvider interface {
+ MetricsCollector() []prometheus.Collector
+}
diff --git a/interfaces/rpc/interface.go b/interfaces/rpc/interface.go
new file mode 100644
index 00000000..683fd2ec
--- /dev/null
+++ b/interfaces/rpc/interface.go
@@ -0,0 +1,7 @@
+package rpc
+
+// RPCer declares the ability to create set of public RPC methods.
+type RPCer interface {
+ // Provides RPC methods for the given service.
+ RPC() interface{}
+}
diff --git a/interfaces/server/interface.go b/interfaces/server/interface.go
new file mode 100644
index 00000000..51d172cb
--- /dev/null
+++ b/interfaces/server/interface.go
@@ -0,0 +1,17 @@
+package server
+
+import (
+ "context"
+ "os/exec"
+
+ "github.com/spiral/roadrunner/v2"
+)
+
+type Env map[string]string
+
+// WorkerFactory creates workers for the application.
+type WorkerFactory interface {
+ CmdFactory(env Env) (func() *exec.Cmd, error)
+ NewWorker(ctx context.Context, env Env) (roadrunner.WorkerBase, error)
+ NewWorkerPool(ctx context.Context, opt roadrunner.PoolConfig, env Env) (roadrunner.Pool, error)
+}