mirror of
https://github.com/go-micro/go-micro.git
synced 2025-06-06 22:06:19 +02:00
152 lines
3.9 KiB
Go
152 lines
3.9 KiB
Go
|
package function
|
||
|
|
||
|
import (
|
||
|
"go.m3o.com/client"
|
||
|
)
|
||
|
|
||
|
func NewFunctionService(token string) *FunctionService {
|
||
|
return &FunctionService{
|
||
|
client: client.NewClient(&client.Options{
|
||
|
Token: token,
|
||
|
}),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type FunctionService struct {
|
||
|
client *client.Client
|
||
|
}
|
||
|
|
||
|
// Call a function by name
|
||
|
func (t *FunctionService) Call(request *CallRequest) (*CallResponse, error) {
|
||
|
rsp := &CallResponse{}
|
||
|
return rsp, t.client.Call("function", "Call", request, rsp)
|
||
|
}
|
||
|
|
||
|
// Delete a function by name
|
||
|
func (t *FunctionService) Delete(request *DeleteRequest) (*DeleteResponse, error) {
|
||
|
rsp := &DeleteResponse{}
|
||
|
return rsp, t.client.Call("function", "Delete", request, rsp)
|
||
|
}
|
||
|
|
||
|
// Deploy a group of functions
|
||
|
func (t *FunctionService) Deploy(request *DeployRequest) (*DeployResponse, error) {
|
||
|
rsp := &DeployResponse{}
|
||
|
return rsp, t.client.Call("function", "Deploy", request, rsp)
|
||
|
}
|
||
|
|
||
|
// Get the info for a deployed function
|
||
|
func (t *FunctionService) Describe(request *DescribeRequest) (*DescribeResponse, error) {
|
||
|
rsp := &DescribeResponse{}
|
||
|
return rsp, t.client.Call("function", "Describe", request, rsp)
|
||
|
}
|
||
|
|
||
|
// List all the deployed functions
|
||
|
func (t *FunctionService) List(request *ListRequest) (*ListResponse, error) {
|
||
|
rsp := &ListResponse{}
|
||
|
return rsp, t.client.Call("function", "List", request, rsp)
|
||
|
}
|
||
|
|
||
|
type CallRequest struct {
|
||
|
// Name of the function
|
||
|
Name string `json:"name"`
|
||
|
// Request body that will be passed to the function
|
||
|
Request map[string]interface{} `json:"request"`
|
||
|
}
|
||
|
|
||
|
type CallResponse struct {
|
||
|
// Response body that the function returned
|
||
|
Response map[string]interface{} `json:"response"`
|
||
|
}
|
||
|
|
||
|
type DeleteRequest struct {
|
||
|
// The name of the function
|
||
|
Name string `json:"name"`
|
||
|
// Optional project name
|
||
|
Project string `json:"project"`
|
||
|
}
|
||
|
|
||
|
type DeleteResponse struct {
|
||
|
}
|
||
|
|
||
|
type DeployRequest struct {
|
||
|
// entry point, ie. handler name in the source code
|
||
|
// if not provided, defaults to the name parameter
|
||
|
Entrypoint string `json:"entrypoint"`
|
||
|
// environment variables to pass in at runtime
|
||
|
EnvVars map[string]string `json:"envVars"`
|
||
|
// function name
|
||
|
Name string `json:"name"`
|
||
|
// project is used for namespacing your functions
|
||
|
// optional. defaults to "default".
|
||
|
Project string `json:"project"`
|
||
|
// github url to repo
|
||
|
Repo string `json:"repo"`
|
||
|
// runtime/language of the function
|
||
|
// eg: php74,
|
||
|
// nodejs6, nodejs8, nodejs10, nodejs12, nodejs14, nodejs16
|
||
|
// dotnet3
|
||
|
// java11
|
||
|
// ruby26, ruby27
|
||
|
// go111, go113, go116
|
||
|
// python37, python38, python39
|
||
|
Runtime string `json:"runtime"`
|
||
|
// optional subfolder path
|
||
|
Subfolder string `json:"subfolder"`
|
||
|
}
|
||
|
|
||
|
type DeployResponse struct {
|
||
|
}
|
||
|
|
||
|
type DescribeRequest struct {
|
||
|
// The name of the function
|
||
|
Name string `json:"name"`
|
||
|
// Optional project name
|
||
|
Project string `json:"project"`
|
||
|
}
|
||
|
|
||
|
type DescribeResponse struct {
|
||
|
// The function requested
|
||
|
Function *Func `json:"function"`
|
||
|
// The timeout for requests to the function
|
||
|
Timeout string `json:"timeout"`
|
||
|
// The time at which the function was updated
|
||
|
UpdatedAt string `json:"updatedAt"`
|
||
|
}
|
||
|
|
||
|
type Func struct {
|
||
|
// name of handler in source code
|
||
|
Entrypoint string `json:"entrypoint"`
|
||
|
// function name
|
||
|
// limitation: must be unique across projects
|
||
|
Name string `json:"name"`
|
||
|
// project of function, optional
|
||
|
// defaults to literal "default"
|
||
|
// used to namespace functions
|
||
|
Project string `json:"project"`
|
||
|
// git repo address
|
||
|
Repo string `json:"repo"`
|
||
|
// runtime/language of the function
|
||
|
// eg: php74,
|
||
|
// nodejs6, nodejs8, nodejs10, nodejs12, nodejs14, nodejs16
|
||
|
// dotnet3
|
||
|
// java11
|
||
|
// ruby26, ruby27
|
||
|
// go111, go113, go116
|
||
|
// python37, python38, python39
|
||
|
Runtime string `json:"runtime"`
|
||
|
// eg. ACTIVE, DEPLOY_IN_PROGRESS, OFFLINE etc
|
||
|
Status string `json:"status"`
|
||
|
// subfolder path to entrypoint
|
||
|
Subfolder string `json:"subfolder"`
|
||
|
}
|
||
|
|
||
|
type ListRequest struct {
|
||
|
// optional project name
|
||
|
Project string `json:"project"`
|
||
|
}
|
||
|
|
||
|
type ListResponse struct {
|
||
|
// List of functions deployed
|
||
|
Functions []Func `json:"functions"`
|
||
|
}
|