dvserver

package
v3.13.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 3, 2023 License: Apache-2.0, MIT Imports: 51 Imported by: 0

Documentation

Overview

Package dvserver is a reverse proxy.

It translates gRPC into RESTful JSON APIs.

Index

Constants

This section is empty.

Variables

View Source
var (
	ErrInvalidLengthDvserver        = fmt.Errorf("proto: negative length found during unmarshaling")
	ErrIntOverflowDvserver          = fmt.Errorf("proto: integer overflow")
	ErrUnexpectedEndOfGroupDvserver = fmt.Errorf("proto: unexpected end of group")
)

Functions

func RegisterDepvizServiceHandler

func RegisterDepvizServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error

RegisterDepvizServiceHandler registers the http handlers for service DepvizService to "mux". The handlers forward requests to the grpc endpoint over "conn".

func RegisterDepvizServiceHandlerClient

func RegisterDepvizServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client DepvizServiceClient) error

RegisterDepvizServiceHandlerClient registers the http handlers for service DepvizService to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "DepvizServiceClient". Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "DepvizServiceClient" doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in "DepvizServiceClient" to call the correct interceptors.

func RegisterDepvizServiceHandlerFromEndpoint

func RegisterDepvizServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error)

RegisterDepvizServiceHandlerFromEndpoint is same as RegisterDepvizServiceHandler but automatically dials to "endpoint" and closes the connection when "ctx" gets done.

func RegisterDepvizServiceHandlerServer

func RegisterDepvizServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server DepvizServiceServer) error

RegisterDepvizServiceHandlerServer registers the http handlers for service DepvizService to "mux". UnaryRPC :call DepvizServiceServer directly. StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterDepvizServiceHandlerFromEndpoint instead.

func RegisterDepvizServiceServer

func RegisterDepvizServiceServer(s *grpc.Server, srv DepvizServiceServer)

Types

type DepvizServiceClient

type DepvizServiceClient interface {
	Graph(ctx context.Context, in *Graph_Input, opts ...grpc.CallOption) (*Graph_Output, error)
	StoreDump(ctx context.Context, in *StoreDump_Input, opts ...grpc.CallOption) (*StoreDump_Output, error)
	Ping(ctx context.Context, in *Ping_Input, opts ...grpc.CallOption) (*Ping_Output, error)
	Status(ctx context.Context, in *Status_Input, opts ...grpc.CallOption) (*Status_Output, error)
}

DepvizServiceClient is the client API for DepvizService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream.

func NewDepvizServiceClient

func NewDepvizServiceClient(cc *grpc.ClientConn) DepvizServiceClient

type DepvizServiceServer

DepvizServiceServer is the server API for DepvizService service.

type Graph

type Graph struct {
}

func (*Graph) Descriptor

func (*Graph) Descriptor() ([]byte, []int)

func (*Graph) Marshal

func (m *Graph) Marshal() (dAtA []byte, err error)

func (*Graph) MarshalTo

func (m *Graph) MarshalTo(dAtA []byte) (int, error)

func (*Graph) MarshalToSizedBuffer

func (m *Graph) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Graph) ProtoMessage

func (*Graph) ProtoMessage()

func (*Graph) Reset

func (m *Graph) Reset()

func (*Graph) Size

func (m *Graph) Size() (n int)

func (*Graph) String

func (m *Graph) String() string

func (*Graph) Unmarshal

func (m *Graph) Unmarshal(dAtA []byte) error

func (*Graph) XXX_DiscardUnknown

func (m *Graph) XXX_DiscardUnknown()

func (*Graph) XXX_Marshal

func (m *Graph) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Graph) XXX_Merge

func (m *Graph) XXX_Merge(src proto.Message)

func (*Graph) XXX_Size

func (m *Graph) XXX_Size() int

func (*Graph) XXX_Unmarshal

func (m *Graph) XXX_Unmarshal(b []byte) error

type Graph_Input

type Graph_Input struct {
	Targets             []string `protobuf:"bytes,1,rep,name=targets,proto3" json:"targets,omitempty"`
	WithClosed          bool     `protobuf:"varint,2,opt,name=with_closed,json=withClosed,proto3" json:"with_closed,omitempty"`
	WithoutIsolated     bool     `protobuf:"varint,3,opt,name=without_isolated,json=withoutIsolated,proto3" json:"without_isolated,omitempty"`
	WithoutPRs          bool     `protobuf:"varint,4,opt,name=without_prs,json=withoutPrs,proto3" json:"without_prs,omitempty"`
	WithoutExternalDeps bool     `protobuf:"varint,5,opt,name=without_external_deps,json=withoutExternalDeps,proto3" json:"without_external_deps,omitempty"`
	WithFetch           bool     `protobuf:"varint,6,opt,name=with_fetch,json=withFetch,proto3" json:"with_fetch,omitempty"`
}

func (*Graph_Input) Descriptor

func (*Graph_Input) Descriptor() ([]byte, []int)

func (*Graph_Input) GetTargets

func (m *Graph_Input) GetTargets() []string

func (*Graph_Input) GetWithClosed

func (m *Graph_Input) GetWithClosed() bool

func (*Graph_Input) GetWithFetch

func (m *Graph_Input) GetWithFetch() bool

func (*Graph_Input) GetWithoutExternalDeps

func (m *Graph_Input) GetWithoutExternalDeps() bool

func (*Graph_Input) GetWithoutIsolated

func (m *Graph_Input) GetWithoutIsolated() bool

func (*Graph_Input) GetWithoutPRs

func (m *Graph_Input) GetWithoutPRs() bool

func (*Graph_Input) Marshal

func (m *Graph_Input) Marshal() (dAtA []byte, err error)

func (*Graph_Input) MarshalTo

func (m *Graph_Input) MarshalTo(dAtA []byte) (int, error)

func (*Graph_Input) MarshalToSizedBuffer

func (m *Graph_Input) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Graph_Input) ProtoMessage

func (*Graph_Input) ProtoMessage()

func (*Graph_Input) Reset

func (m *Graph_Input) Reset()

func (*Graph_Input) Size

func (m *Graph_Input) Size() (n int)

func (*Graph_Input) String

func (m *Graph_Input) String() string

func (*Graph_Input) Unmarshal

func (m *Graph_Input) Unmarshal(dAtA []byte) error

func (*Graph_Input) XXX_DiscardUnknown

func (m *Graph_Input) XXX_DiscardUnknown()

func (*Graph_Input) XXX_Marshal

func (m *Graph_Input) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Graph_Input) XXX_Merge

func (m *Graph_Input) XXX_Merge(src proto.Message)

func (*Graph_Input) XXX_Size

func (m *Graph_Input) XXX_Size() int

func (*Graph_Input) XXX_Unmarshal

func (m *Graph_Input) XXX_Unmarshal(b []byte) error

type Graph_Output

type Graph_Output struct {
	Tasks []*dvmodel.Task `protobuf:"bytes,1,rep,name=tasks,proto3" json:"tasks,omitempty"`
}

func (*Graph_Output) Descriptor

func (*Graph_Output) Descriptor() ([]byte, []int)

func (*Graph_Output) GetTasks

func (m *Graph_Output) GetTasks() []*dvmodel.Task

func (*Graph_Output) Marshal

func (m *Graph_Output) Marshal() (dAtA []byte, err error)

func (*Graph_Output) MarshalTo

func (m *Graph_Output) MarshalTo(dAtA []byte) (int, error)

func (*Graph_Output) MarshalToSizedBuffer

func (m *Graph_Output) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Graph_Output) ProtoMessage

func (*Graph_Output) ProtoMessage()

func (*Graph_Output) Reset

func (m *Graph_Output) Reset()

func (*Graph_Output) Size

func (m *Graph_Output) Size() (n int)

func (*Graph_Output) String

func (m *Graph_Output) String() string

func (*Graph_Output) Unmarshal

func (m *Graph_Output) Unmarshal(dAtA []byte) error

func (*Graph_Output) XXX_DiscardUnknown

func (m *Graph_Output) XXX_DiscardUnknown()

func (*Graph_Output) XXX_Marshal

func (m *Graph_Output) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Graph_Output) XXX_Merge

func (m *Graph_Output) XXX_Merge(src proto.Message)

func (*Graph_Output) XXX_Size

func (m *Graph_Output) XXX_Size() int

func (*Graph_Output) XXX_Unmarshal

func (m *Graph_Output) XXX_Unmarshal(b []byte) error

type Opts

type Opts struct {
	Logger             *zap.Logger
	HTTPBind           string
	GRPCBind           string
	CORSAllowedOrigins string
	ShutdownTimeout    time.Duration
	RequestTimeout     time.Duration
	WithoutRecovery    bool
	WithPprof          bool
	Godmode            bool
	WithoutCache       bool
	Auth               string
	Realm              string
	GitHubToken        string
	NoAutoUpdate       bool
	AutoUpdateTargets  []multipmuri.Entity
	AutoUpdateInterval time.Duration
	GitHubClientID     string
	GitHubClientSecret string
}

type Ping

type Ping struct {
}

func (*Ping) Descriptor

func (*Ping) Descriptor() ([]byte, []int)

func (*Ping) Marshal

func (m *Ping) Marshal() (dAtA []byte, err error)

func (*Ping) MarshalTo

func (m *Ping) MarshalTo(dAtA []byte) (int, error)

func (*Ping) MarshalToSizedBuffer

func (m *Ping) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Ping) ProtoMessage

func (*Ping) ProtoMessage()

func (*Ping) Reset

func (m *Ping) Reset()

func (*Ping) Size

func (m *Ping) Size() (n int)

func (*Ping) String

func (m *Ping) String() string

func (*Ping) Unmarshal

func (m *Ping) Unmarshal(dAtA []byte) error

func (*Ping) XXX_DiscardUnknown

func (m *Ping) XXX_DiscardUnknown()

func (*Ping) XXX_Marshal

func (m *Ping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Ping) XXX_Merge

func (m *Ping) XXX_Merge(src proto.Message)

func (*Ping) XXX_Size

func (m *Ping) XXX_Size() int

func (*Ping) XXX_Unmarshal

func (m *Ping) XXX_Unmarshal(b []byte) error

type Ping_Input

type Ping_Input struct {
}

func (*Ping_Input) Descriptor

func (*Ping_Input) Descriptor() ([]byte, []int)

func (*Ping_Input) Marshal

func (m *Ping_Input) Marshal() (dAtA []byte, err error)

func (*Ping_Input) MarshalTo

func (m *Ping_Input) MarshalTo(dAtA []byte) (int, error)

func (*Ping_Input) MarshalToSizedBuffer

func (m *Ping_Input) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Ping_Input) ProtoMessage

func (*Ping_Input) ProtoMessage()

func (*Ping_Input) Reset

func (m *Ping_Input) Reset()

func (*Ping_Input) Size

func (m *Ping_Input) Size() (n int)

func (*Ping_Input) String

func (m *Ping_Input) String() string

func (*Ping_Input) Unmarshal

func (m *Ping_Input) Unmarshal(dAtA []byte) error

func (*Ping_Input) XXX_DiscardUnknown

func (m *Ping_Input) XXX_DiscardUnknown()

func (*Ping_Input) XXX_Marshal

func (m *Ping_Input) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Ping_Input) XXX_Merge

func (m *Ping_Input) XXX_Merge(src proto.Message)

func (*Ping_Input) XXX_Size

func (m *Ping_Input) XXX_Size() int

func (*Ping_Input) XXX_Unmarshal

func (m *Ping_Input) XXX_Unmarshal(b []byte) error

type Ping_Output

type Ping_Output struct {
	Message string `protobuf:"bytes,1,opt,name=message,proto3" json:"message,omitempty"`
}

func (*Ping_Output) Descriptor

func (*Ping_Output) Descriptor() ([]byte, []int)

func (*Ping_Output) GetMessage

func (m *Ping_Output) GetMessage() string

func (*Ping_Output) Marshal

func (m *Ping_Output) Marshal() (dAtA []byte, err error)

func (*Ping_Output) MarshalTo

func (m *Ping_Output) MarshalTo(dAtA []byte) (int, error)

func (*Ping_Output) MarshalToSizedBuffer

func (m *Ping_Output) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Ping_Output) ProtoMessage

func (*Ping_Output) ProtoMessage()

func (*Ping_Output) Reset

func (m *Ping_Output) Reset()

func (*Ping_Output) Size

func (m *Ping_Output) Size() (n int)

func (*Ping_Output) String

func (m *Ping_Output) String() string

func (*Ping_Output) Unmarshal

func (m *Ping_Output) Unmarshal(dAtA []byte) error

func (*Ping_Output) XXX_DiscardUnknown

func (m *Ping_Output) XXX_DiscardUnknown()

func (*Ping_Output) XXX_Marshal

func (m *Ping_Output) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Ping_Output) XXX_Merge

func (m *Ping_Output) XXX_Merge(src proto.Message)

func (*Ping_Output) XXX_Size

func (m *Ping_Output) XXX_Size() int

func (*Ping_Output) XXX_Unmarshal

func (m *Ping_Output) XXX_Unmarshal(b []byte) error

type Service

type Service interface {
	DepvizServiceServer
	Run() error
	Close()
	HTTPListenerAddr() string
	GRPCListenerAddr() string
}

func New

func New(ctx context.Context, h *cayley.Handle, schema *schema.Config, opts Opts) (Service, error)

type Status

type Status struct {
}

func (*Status) Descriptor

func (*Status) Descriptor() ([]byte, []int)

func (*Status) Marshal

func (m *Status) Marshal() (dAtA []byte, err error)

func (*Status) MarshalTo

func (m *Status) MarshalTo(dAtA []byte) (int, error)

func (*Status) MarshalToSizedBuffer

func (m *Status) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Status) ProtoMessage

func (*Status) ProtoMessage()

func (*Status) Reset

func (m *Status) Reset()

func (*Status) Size

func (m *Status) Size() (n int)

func (*Status) String

func (m *Status) String() string

func (*Status) Unmarshal

func (m *Status) Unmarshal(dAtA []byte) error

func (*Status) XXX_DiscardUnknown

func (m *Status) XXX_DiscardUnknown()

func (*Status) XXX_Marshal

func (m *Status) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Status) XXX_Merge

func (m *Status) XXX_Merge(src proto.Message)

func (*Status) XXX_Size

func (m *Status) XXX_Size() int

func (*Status) XXX_Unmarshal

func (m *Status) XXX_Unmarshal(b []byte) error

type Status_Input

type Status_Input struct {
}

func (*Status_Input) Descriptor

func (*Status_Input) Descriptor() ([]byte, []int)

func (*Status_Input) Marshal

func (m *Status_Input) Marshal() (dAtA []byte, err error)

func (*Status_Input) MarshalTo

func (m *Status_Input) MarshalTo(dAtA []byte) (int, error)

func (*Status_Input) MarshalToSizedBuffer

func (m *Status_Input) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Status_Input) ProtoMessage

func (*Status_Input) ProtoMessage()

func (*Status_Input) Reset

func (m *Status_Input) Reset()

func (*Status_Input) Size

func (m *Status_Input) Size() (n int)

func (*Status_Input) String

func (m *Status_Input) String() string

func (*Status_Input) Unmarshal

func (m *Status_Input) Unmarshal(dAtA []byte) error

func (*Status_Input) XXX_DiscardUnknown

func (m *Status_Input) XXX_DiscardUnknown()

func (*Status_Input) XXX_Marshal

func (m *Status_Input) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Status_Input) XXX_Merge

func (m *Status_Input) XXX_Merge(src proto.Message)

func (*Status_Input) XXX_Size

func (m *Status_Input) XXX_Size() int

func (*Status_Input) XXX_Unmarshal

func (m *Status_Input) XXX_Unmarshal(b []byte) error

type Status_Output

type Status_Output struct {
	EverythingIsOK bool `protobuf:"varint,1,opt,name=everything_is_ok,json=everythingIsOk,proto3" json:"everything_is_ok,omitempty"`
}

func (*Status_Output) Descriptor

func (*Status_Output) Descriptor() ([]byte, []int)

func (*Status_Output) GetEverythingIsOK

func (m *Status_Output) GetEverythingIsOK() bool

func (*Status_Output) Marshal

func (m *Status_Output) Marshal() (dAtA []byte, err error)

func (*Status_Output) MarshalTo

func (m *Status_Output) MarshalTo(dAtA []byte) (int, error)

func (*Status_Output) MarshalToSizedBuffer

func (m *Status_Output) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*Status_Output) ProtoMessage

func (*Status_Output) ProtoMessage()

func (*Status_Output) Reset

func (m *Status_Output) Reset()

func (*Status_Output) Size

func (m *Status_Output) Size() (n int)

func (*Status_Output) String

func (m *Status_Output) String() string

func (*Status_Output) Unmarshal

func (m *Status_Output) Unmarshal(dAtA []byte) error

func (*Status_Output) XXX_DiscardUnknown

func (m *Status_Output) XXX_DiscardUnknown()

func (*Status_Output) XXX_Marshal

func (m *Status_Output) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*Status_Output) XXX_Merge

func (m *Status_Output) XXX_Merge(src proto.Message)

func (*Status_Output) XXX_Size

func (m *Status_Output) XXX_Size() int

func (*Status_Output) XXX_Unmarshal

func (m *Status_Output) XXX_Unmarshal(b []byte) error

type StoreDump

type StoreDump struct {
}

func (*StoreDump) Descriptor

func (*StoreDump) Descriptor() ([]byte, []int)

func (*StoreDump) Marshal

func (m *StoreDump) Marshal() (dAtA []byte, err error)

func (*StoreDump) MarshalTo

func (m *StoreDump) MarshalTo(dAtA []byte) (int, error)

func (*StoreDump) MarshalToSizedBuffer

func (m *StoreDump) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StoreDump) ProtoMessage

func (*StoreDump) ProtoMessage()

func (*StoreDump) Reset

func (m *StoreDump) Reset()

func (*StoreDump) Size

func (m *StoreDump) Size() (n int)

func (*StoreDump) String

func (m *StoreDump) String() string

func (*StoreDump) Unmarshal

func (m *StoreDump) Unmarshal(dAtA []byte) error

func (*StoreDump) XXX_DiscardUnknown

func (m *StoreDump) XXX_DiscardUnknown()

func (*StoreDump) XXX_Marshal

func (m *StoreDump) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StoreDump) XXX_Merge

func (m *StoreDump) XXX_Merge(src proto.Message)

func (*StoreDump) XXX_Size

func (m *StoreDump) XXX_Size() int

func (*StoreDump) XXX_Unmarshal

func (m *StoreDump) XXX_Unmarshal(b []byte) error

type StoreDump_Input

type StoreDump_Input struct {
}

func (*StoreDump_Input) Descriptor

func (*StoreDump_Input) Descriptor() ([]byte, []int)

func (*StoreDump_Input) Marshal

func (m *StoreDump_Input) Marshal() (dAtA []byte, err error)

func (*StoreDump_Input) MarshalTo

func (m *StoreDump_Input) MarshalTo(dAtA []byte) (int, error)

func (*StoreDump_Input) MarshalToSizedBuffer

func (m *StoreDump_Input) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StoreDump_Input) ProtoMessage

func (*StoreDump_Input) ProtoMessage()

func (*StoreDump_Input) Reset

func (m *StoreDump_Input) Reset()

func (*StoreDump_Input) Size

func (m *StoreDump_Input) Size() (n int)

func (*StoreDump_Input) String

func (m *StoreDump_Input) String() string

func (*StoreDump_Input) Unmarshal

func (m *StoreDump_Input) Unmarshal(dAtA []byte) error

func (*StoreDump_Input) XXX_DiscardUnknown

func (m *StoreDump_Input) XXX_DiscardUnknown()

func (*StoreDump_Input) XXX_Marshal

func (m *StoreDump_Input) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StoreDump_Input) XXX_Merge

func (m *StoreDump_Input) XXX_Merge(src proto.Message)

func (*StoreDump_Input) XXX_Size

func (m *StoreDump_Input) XXX_Size() int

func (*StoreDump_Input) XXX_Unmarshal

func (m *StoreDump_Input) XXX_Unmarshal(b []byte) error

type StoreDump_Output

type StoreDump_Output struct {
	Batch *dvmodel.Batch `protobuf:"bytes,1,opt,name=batch,proto3" json:"batch,omitempty"`
}

func (*StoreDump_Output) Descriptor

func (*StoreDump_Output) Descriptor() ([]byte, []int)

func (*StoreDump_Output) GetBatch

func (m *StoreDump_Output) GetBatch() *dvmodel.Batch

func (*StoreDump_Output) Marshal

func (m *StoreDump_Output) Marshal() (dAtA []byte, err error)

func (*StoreDump_Output) MarshalTo

func (m *StoreDump_Output) MarshalTo(dAtA []byte) (int, error)

func (*StoreDump_Output) MarshalToSizedBuffer

func (m *StoreDump_Output) MarshalToSizedBuffer(dAtA []byte) (int, error)

func (*StoreDump_Output) ProtoMessage

func (*StoreDump_Output) ProtoMessage()

func (*StoreDump_Output) Reset

func (m *StoreDump_Output) Reset()

func (*StoreDump_Output) Size

func (m *StoreDump_Output) Size() (n int)

func (*StoreDump_Output) String

func (m *StoreDump_Output) String() string

func (*StoreDump_Output) Unmarshal

func (m *StoreDump_Output) Unmarshal(dAtA []byte) error

func (*StoreDump_Output) XXX_DiscardUnknown

func (m *StoreDump_Output) XXX_DiscardUnknown()

func (*StoreDump_Output) XXX_Marshal

func (m *StoreDump_Output) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)

func (*StoreDump_Output) XXX_Merge

func (m *StoreDump_Output) XXX_Merge(src proto.Message)

func (*StoreDump_Output) XXX_Size

func (m *StoreDump_Output) XXX_Size() int

func (*StoreDump_Output) XXX_Unmarshal

func (m *StoreDump_Output) XXX_Unmarshal(b []byte) error

type UnimplementedDepvizServiceServer

type UnimplementedDepvizServiceServer struct {
}

UnimplementedDepvizServiceServer can be embedded to have forward compatible implementations.

func (*UnimplementedDepvizServiceServer) Graph

func (*UnimplementedDepvizServiceServer) Ping

func (*UnimplementedDepvizServiceServer) Status

func (*UnimplementedDepvizServiceServer) StoreDump

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL