agent

package
v0.3.1 Latest Latest
Warning

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

Go to latest
Published: Aug 26, 2024 License: Apache-2.0 Imports: 26 Imported by: 0

README

Agent

Agent service provides a barebones HTTP and gRPC API and Service interface implementation for the development of the agent service.

Configuration

The service is configured using the environment variables from the following table. Note that any unset variables will be replaced with their default values.

Variable Description Default
AGENT_LOG_LEVEL Log level for agent service (debug, info, warn, error) info
AGENT_GRPC_HOST Agent service gRPC host ""
AGENT_GRPC_PORT Agent service gRPC port 7002
AGENT_GRPC_SERVER_CERT Path to gRPC server certificate in pem format ""
AGENT_GRPC_SERVER_KEY Path to gRPC server key in pem format ""
AGENT_GRPC_SERVER_CA_CERTS Path to gRPC server CA certificate ""
AGENT_GRPC_CLIENT_CA_CERTS Path to gRPC client CA certificate ""

Deployment

To start the service outside of the container, execute the following shell script:

# Download the latest version of the service
git clone git@github.com:ultravioletrs/cocos.git

cd cocos

# Compile the service
make agent

# Run the service
./build/cocos-agent

Usage

For more information about service capabilities and its usage, please check out the README documentation.

Documentation

Overview

Copyright (c) Ultraviolet SPDX-License-Identifier: Apache-2.0

Copyright (c) Ultraviolet SPDX-License-Identifier: Apache-2.0

Index

Constants

View Source
const (
	AgentService_Algo_FullMethodName        = "/agent.AgentService/Algo"
	AgentService_Data_FullMethodName        = "/agent.AgentService/Data"
	AgentService_Result_FullMethodName      = "/agent.AgentService/Result"
	AgentService_Attestation_FullMethodName = "/agent.AgentService/Attestation"
)
View Source
const DecompressKey = "decompress"
View Source
const (
	// ReportDataSize is the size of the report data expected by the attestation service.
	ReportDataSize = 64
)

Variables

View Source
var (
	// ErrMalformedEntity indicates malformed entity specification (e.g.
	// invalid username or password).
	ErrMalformedEntity = errors.New("malformed entity specification")
	// ErrUnauthorizedAccess indicates missing or invalid credentials provided
	// when accessing a protected resource.
	ErrUnauthorizedAccess = errors.New("missing or invalid credentials provided")
	// ErrUndeclaredAlgorithm indicates algorithm was not declared in computation manifest.
	ErrUndeclaredDataset = errors.New("dataset not declared in computation manifest")
	// ErrAllManifestItemsReceived indicates no new computation manifest items expected.
	ErrAllManifestItemsReceived = errors.New("all expected manifest Items have been received")
	// ErrUndeclaredConsumer indicates the consumer requesting results in not declared in computation manifest.
	ErrUndeclaredConsumer = errors.New("result consumer is undeclared in computation manifest")
	// ErrResultsNotReady indicates the computation results are not ready.
	ErrResultsNotReady = errors.New("computation results are not yet ready")
	// ErrStateNotReady agent received a request in the wrong state.
	ErrStateNotReady = errors.New("agent not expecting this operation in the current state")
	// ErrHashMismatch provided algorithm/dataset does not match hash in manifest.
	ErrHashMismatch = errors.New("malformed data, hash does not match manifest")
	// ErrFileNameMismatch provided dataset filename does not match filename in manifest.
	ErrFileNameMismatch = errors.New("malformed data, filename does not match manifest")
	// ErrAllResultsConsumed indicates all results have been consumed.
	ErrAllResultsConsumed = errors.New("all results have been consumed by declared consumers")
)
View Source
var AgentService_ServiceDesc = grpc.ServiceDesc{
	ServiceName: "agent.AgentService",
	HandlerType: (*AgentServiceServer)(nil),
	Methods: []grpc.MethodDesc{
		{
			MethodName: "Attestation",
			Handler:    _AgentService_Attestation_Handler,
		},
	},
	Streams: []grpc.StreamDesc{
		{
			StreamName:    "Algo",
			Handler:       _AgentService_Algo_Handler,
			ClientStreams: true,
		},
		{
			StreamName:    "Data",
			Handler:       _AgentService_Data_Handler,
			ClientStreams: true,
		},
		{
			StreamName:    "Result",
			Handler:       _AgentService_Result_Handler,
			ServerStreams: true,
		},
	},
	Metadata: "agent/agent.proto",
}

AgentService_ServiceDesc is the grpc.ServiceDesc for AgentService service. It's only intended for direct use with grpc.RegisterService, and not to be introspected or modified (even as a copy)

View Source
var File_agent_agent_proto protoreflect.FileDescriptor

Functions

func DecompressFromContext added in v0.3.0

func DecompressFromContext(ctx context.Context) bool

func DecompressToContext added in v0.3.0

func DecompressToContext(ctx context.Context, decompress bool) context.Context

func IndexFromContext added in v0.2.0

func IndexFromContext(ctx context.Context) (int, bool)

func IndexToContext added in v0.2.0

func IndexToContext(ctx context.Context, index int) context.Context

func RegisterAgentServiceServer

func RegisterAgentServiceServer(s grpc.ServiceRegistrar, srv AgentServiceServer)

Types

type AgentConfig added in v0.0.2

type AgentConfig struct {
	LogLevel     string `json:"log_level"`
	Host         string `json:"host"`
	Port         string `json:"port"`
	CertFile     string `json:"cert_file"`
	KeyFile      string `json:"server_key"`
	ServerCAFile string `json:"server_ca_file"`
	ClientCAFile string `json:"client_ca_file"`
	AttestedTls  bool   `json:"attested_tls"`
}

type AgentServiceClient

type AgentServiceClient interface {
	Algo(ctx context.Context, opts ...grpc.CallOption) (AgentService_AlgoClient, error)
	Data(ctx context.Context, opts ...grpc.CallOption) (AgentService_DataClient, error)
	Result(ctx context.Context, in *ResultRequest, opts ...grpc.CallOption) (AgentService_ResultClient, error)
	Attestation(ctx context.Context, in *AttestationRequest, opts ...grpc.CallOption) (*AttestationResponse, error)
}

AgentServiceClient is the client API for AgentService service.

For semantics around ctx use and closing/ending streaming RPCs, please refer to https://pkg.go.dev/google.golang.org/grpc/?tab=doc#ClientConn.NewStream.

type AgentServiceServer

type AgentServiceServer interface {
	Algo(AgentService_AlgoServer) error
	Data(AgentService_DataServer) error
	Result(*ResultRequest, AgentService_ResultServer) error
	Attestation(context.Context, *AttestationRequest) (*AttestationResponse, error)
	// contains filtered or unexported methods
}

AgentServiceServer is the server API for AgentService service. All implementations must embed UnimplementedAgentServiceServer for forward compatibility

type AgentService_AlgoClient added in v0.2.0

type AgentService_AlgoClient interface {
	Send(*AlgoRequest) error
	CloseAndRecv() (*AlgoResponse, error)
	grpc.ClientStream
}

type AgentService_AlgoServer added in v0.2.0

type AgentService_AlgoServer interface {
	SendAndClose(*AlgoResponse) error
	Recv() (*AlgoRequest, error)
	grpc.ServerStream
}

type AgentService_DataClient added in v0.2.0

type AgentService_DataClient interface {
	Send(*DataRequest) error
	CloseAndRecv() (*DataResponse, error)
	grpc.ClientStream
}

type AgentService_DataServer added in v0.2.0

type AgentService_DataServer interface {
	SendAndClose(*DataResponse) error
	Recv() (*DataRequest, error)
	grpc.ServerStream
}

type AgentService_ResultClient added in v0.2.0

type AgentService_ResultClient interface {
	Recv() (*ResultResponse, error)
	grpc.ClientStream
}

type AgentService_ResultServer added in v0.2.0

type AgentService_ResultServer interface {
	Send(*ResultResponse) error
	grpc.ServerStream
}

type AlgoRequest

type AlgoRequest struct {
	Algorithm    []byte `protobuf:"bytes,1,opt,name=algorithm,proto3" json:"algorithm,omitempty"`
	Requirements []byte `protobuf:"bytes,2,opt,name=requirements,proto3" json:"requirements,omitempty"`
	// contains filtered or unexported fields
}

func (*AlgoRequest) Descriptor deprecated

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

Deprecated: Use AlgoRequest.ProtoReflect.Descriptor instead.

func (*AlgoRequest) GetAlgorithm

func (x *AlgoRequest) GetAlgorithm() []byte

func (*AlgoRequest) GetRequirements added in v0.2.0

func (x *AlgoRequest) GetRequirements() []byte

func (*AlgoRequest) ProtoMessage

func (*AlgoRequest) ProtoMessage()

func (*AlgoRequest) ProtoReflect

func (x *AlgoRequest) ProtoReflect() protoreflect.Message

func (*AlgoRequest) Reset

func (x *AlgoRequest) Reset()

func (*AlgoRequest) String

func (x *AlgoRequest) String() string

type AlgoResponse

type AlgoResponse struct {
	// contains filtered or unexported fields
}

func (*AlgoResponse) Descriptor deprecated

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

Deprecated: Use AlgoResponse.ProtoReflect.Descriptor instead.

func (*AlgoResponse) ProtoMessage

func (*AlgoResponse) ProtoMessage()

func (*AlgoResponse) ProtoReflect

func (x *AlgoResponse) ProtoReflect() protoreflect.Message

func (*AlgoResponse) Reset

func (x *AlgoResponse) Reset()

func (*AlgoResponse) String

func (x *AlgoResponse) String() string

type Algorithm

type Algorithm struct {
	Algorithm    []byte   `json:"-"`
	Hash         [32]byte `json:"hash,omitempty"`
	UserKey      []byte   `json:"user_key,omitempty"`
	Requirements []byte   `json:"-"`
}

type AttestationRequest

type AttestationRequest struct {
	ReportData []byte `protobuf:"bytes,1,opt,name=report_data,json=reportData,proto3" json:"report_data,omitempty"` // Should be of length 64.
	// contains filtered or unexported fields
}

func (*AttestationRequest) Descriptor deprecated

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

Deprecated: Use AttestationRequest.ProtoReflect.Descriptor instead.

func (*AttestationRequest) GetReportData added in v0.0.2

func (x *AttestationRequest) GetReportData() []byte

func (*AttestationRequest) ProtoMessage

func (*AttestationRequest) ProtoMessage()

func (*AttestationRequest) ProtoReflect

func (x *AttestationRequest) ProtoReflect() protoreflect.Message

func (*AttestationRequest) Reset

func (x *AttestationRequest) Reset()

func (*AttestationRequest) String

func (x *AttestationRequest) String() string

type AttestationResponse

type AttestationResponse struct {
	File []byte `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
	// contains filtered or unexported fields
}

func (*AttestationResponse) Descriptor deprecated

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

Deprecated: Use AttestationResponse.ProtoReflect.Descriptor instead.

func (*AttestationResponse) GetFile

func (x *AttestationResponse) GetFile() []byte

func (*AttestationResponse) ProtoMessage

func (*AttestationResponse) ProtoMessage()

func (*AttestationResponse) ProtoReflect

func (x *AttestationResponse) ProtoReflect() protoreflect.Message

func (*AttestationResponse) Reset

func (x *AttestationResponse) Reset()

func (*AttestationResponse) String

func (x *AttestationResponse) String() string

type Computation

type Computation struct {
	ID              string           `json:"id,omitempty"`
	Name            string           `json:"name,omitempty"`
	Description     string           `json:"description,omitempty"`
	Datasets        Datasets         `json:"datasets,omitempty"`
	Algorithm       Algorithm        `json:"algorithm,omitempty"`
	ResultConsumers []ResultConsumer `json:"result_consumers,omitempty"`
	AgentConfig     AgentConfig      `json:"agent_config,omitempty"`
}

type DataRequest

type DataRequest struct {
	Dataset  []byte `protobuf:"bytes,1,opt,name=dataset,proto3" json:"dataset,omitempty"`
	Filename string `protobuf:"bytes,2,opt,name=filename,proto3" json:"filename,omitempty"`
	// contains filtered or unexported fields
}

func (*DataRequest) Descriptor deprecated

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

Deprecated: Use DataRequest.ProtoReflect.Descriptor instead.

func (*DataRequest) GetDataset

func (x *DataRequest) GetDataset() []byte

func (*DataRequest) GetFilename added in v0.3.0

func (x *DataRequest) GetFilename() string

func (*DataRequest) ProtoMessage

func (*DataRequest) ProtoMessage()

func (*DataRequest) ProtoReflect

func (x *DataRequest) ProtoReflect() protoreflect.Message

func (*DataRequest) Reset

func (x *DataRequest) Reset()

func (*DataRequest) String

func (x *DataRequest) String() string

type DataResponse

type DataResponse struct {
	// contains filtered or unexported fields
}

func (*DataResponse) Descriptor deprecated

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

Deprecated: Use DataResponse.ProtoReflect.Descriptor instead.

func (*DataResponse) ProtoMessage

func (*DataResponse) ProtoMessage()

func (*DataResponse) ProtoReflect

func (x *DataResponse) ProtoReflect() protoreflect.Message

func (*DataResponse) Reset

func (x *DataResponse) Reset()

func (*DataResponse) String

func (x *DataResponse) String() string

type Dataset

type Dataset struct {
	Dataset  []byte   `json:"-"`
	Hash     [32]byte `json:"hash,omitempty"`
	UserKey  []byte   `json:"user_key,omitempty"`
	Filename string   `json:"filename,omitempty"`
}

type Datasets

type Datasets []Dataset

func (*Datasets) String

func (d *Datasets) String() string

type ManifestIndexKey added in v0.2.0

type ManifestIndexKey struct{}

type ResultConsumer added in v0.2.0

type ResultConsumer struct {
	UserKey []byte `json:"user_key,omitempty"`
}

type ResultRequest

type ResultRequest struct {
	// contains filtered or unexported fields
}

func (*ResultRequest) Descriptor deprecated

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

Deprecated: Use ResultRequest.ProtoReflect.Descriptor instead.

func (*ResultRequest) ProtoMessage

func (*ResultRequest) ProtoMessage()

func (*ResultRequest) ProtoReflect

func (x *ResultRequest) ProtoReflect() protoreflect.Message

func (*ResultRequest) Reset

func (x *ResultRequest) Reset()

func (*ResultRequest) String

func (x *ResultRequest) String() string

type ResultResponse

type ResultResponse struct {
	File []byte `protobuf:"bytes,1,opt,name=file,proto3" json:"file,omitempty"`
	// contains filtered or unexported fields
}

func (*ResultResponse) Descriptor deprecated

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

Deprecated: Use ResultResponse.ProtoReflect.Descriptor instead.

func (*ResultResponse) GetFile

func (x *ResultResponse) GetFile() []byte

func (*ResultResponse) ProtoMessage

func (*ResultResponse) ProtoMessage()

func (*ResultResponse) ProtoReflect

func (x *ResultResponse) ProtoReflect() protoreflect.Message

func (*ResultResponse) Reset

func (x *ResultResponse) Reset()

func (*ResultResponse) String

func (x *ResultResponse) String() string

type Service

type Service interface {
	Algo(ctx context.Context, algorithm Algorithm) error
	Data(ctx context.Context, dataset Dataset) error
	Result(ctx context.Context) ([]byte, error)
	Attestation(ctx context.Context, reportData [ReportDataSize]byte) ([]byte, error)
}

Service specifies an API that must be fullfiled by the domain service implementation, and all of its decorators (e.g. logging & metrics).

func New

func New(ctx context.Context, logger *slog.Logger, eventSvc events.Service, cmp Computation, quoteProvider client.QuoteProvider) Service

New instantiates the agent service implementation.

type StateMachine

type StateMachine struct {
	State          state
	EventChan      chan event
	Transitions    map[state]map[event]state
	StateFunctions map[state]func()
	// contains filtered or unexported fields
}

StateMachine represents the state machine.

func NewStateMachine

func NewStateMachine(logger *slog.Logger, cmp Computation) *StateMachine

NewStateMachine creates a new StateMachine.

func (*StateMachine) GetState

func (sm *StateMachine) GetState() state

func (*StateMachine) SendEvent

func (sm *StateMachine) SendEvent(event event)

SendEvent sends an event to the state machine.

func (*StateMachine) SetState

func (sm *StateMachine) SetState(state state)

func (*StateMachine) Start

func (sm *StateMachine) Start(ctx context.Context)

Start the state machine.

type UnimplementedAgentServiceServer

type UnimplementedAgentServiceServer struct {
}

UnimplementedAgentServiceServer must be embedded to have forward compatible implementations.

func (UnimplementedAgentServiceServer) Algo

func (UnimplementedAgentServiceServer) Attestation

func (UnimplementedAgentServiceServer) Data

func (UnimplementedAgentServiceServer) Result

type UnsafeAgentServiceServer

type UnsafeAgentServiceServer interface {
	// contains filtered or unexported methods
}

UnsafeAgentServiceServer may be embedded to opt out of forward compatibility for this service. Use of this interface is not recommended, as added methods to AgentServiceServer will result in compilation errors.

Directories

Path Synopsis
api
Package api contains API-related concerns: endpoint definitions, middlewares and all resource representations.
Package api contains API-related concerns: endpoint definitions, middlewares and all resource representations.
grpc
Package grpc contains implementation of kit service gRPC API.
Package grpc contains implementation of kit service gRPC API.

Jump to

Keyboard shortcuts

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