1
0
Fork 0
mirror of https://github.com/eosswedenorg/antelope-api-healthcheck synced 2026-06-17 04:50:02 +02:00

Merge branch 'api-refactor' into dev

This commit is contained in:
Henrik Hautakoski 2022-10-26 10:31:42 +02:00
commit cb8eec6ff6
No known key found for this signature in database
GPG key ID: 608414D93E862CCD
10 changed files with 108 additions and 21 deletions

View file

@ -25,6 +25,10 @@ func parseResponse(resp string) (agentcheck.Response, error) {
return agentcheck.NewStatusResponse(rtype), nil
}
func DebugApiFactory(args ApiArguments) ApiInterface {
return NewDebugApi(args.Url)
}
func NewDebugApi(response string) DebugApi {
resp, _ := parseResponse(response)

View file

@ -7,6 +7,18 @@ import (
"github.com/eosswedenorg-go/haproxy/agentcheck"
)
func TestDebugApiFactory(t *testing.T) {
api := DebugApiFactory(ApiArguments{
Url: "up",
Host: "host",
NumBlocks: 40,
})
assert.IsType(t, DebugApi{}, api)
assert.Equal(t, api.(DebugApi).response, agentcheck.NewStatusResponse(agentcheck.Up))
}
func TestNewDebugApi(t *testing.T) {
type args struct {
response string

View file

@ -14,6 +14,10 @@ type EosioContract struct {
block_time float64
}
func EosioContractFactory(args ApiArguments) ApiInterface {
return NewEosioContract(args.Url, float64(args.NumBlocks / 2))
}
func NewEosioContract(url string, block_time float64) EosioContract {
return EosioContract{
client: contract_api.Client{

View file

@ -10,6 +10,21 @@ import (
"github.com/eosswedenorg-go/haproxy/agentcheck"
)
func TestEosioContractFactory(t *testing.T) {
api := EosioContractFactory(ApiArguments{
Url: "https://atomic.example.com",
NumBlocks: 120,
})
expected := NewEosioContract("https://atomic.example.com", 60)
assert.IsType(t, expected, api)
assert.Equal(t, expected.client.Url, api.(EosioContract).client.Url)
assert.Equal(t, expected.client.Host, api.(EosioContract).client.Host)
assert.Equal(t, expected.block_time, api.(EosioContract).block_time)
}
func TestEosioContractLogInfo(t *testing.T) {
api := NewEosioContract("https://atomic.example.com", 120)

View file

@ -14,6 +14,10 @@ type EosioV1 struct {
block_time float64
}
func EosioV1Factory(args ApiArguments) ApiInterface {
return NewEosioV1(args.Url, args.Host, float64(args.NumBlocks / 2))
}
func NewEosioV1(url string, host string, block_time float64) EosioV1 {
api := EosioV1{

View file

@ -10,6 +10,22 @@ import (
"github.com/eosswedenorg-go/haproxy/agentcheck"
)
func TestEosioV1Factory(t *testing.T) {
api := EosioV1Factory(ApiArguments{
Url: "https://api.v1.example.com",
Host: "host.example.com",
NumBlocks: 120,
})
expected := NewEosioV1("https://api.v1.example.com", "host.example.com", 60)
assert.IsType(t, expected, api)
assert.Equal(t, expected.client.Url, api.(EosioV1).client.Url)
assert.Equal(t, expected.client.Host, api.(EosioV1).client.Host)
assert.Equal(t, expected.block_time, api.(EosioV1).block_time)
}
func TestEosioV1LogInfo(t *testing.T) {
api := NewEosioV1("https://api.v1.example.com", "host.example.com", 120)

View file

@ -13,6 +13,10 @@ type EosioV2 struct {
offset int64
}
func EosioV2Factory(args ApiArguments) ApiInterface {
return NewEosioV2(args.Url, args.Host, int64(args.NumBlocks))
}
func NewEosioV2(url string, host string, offset int64) EosioV2 {
api := EosioV2{

View file

@ -9,6 +9,22 @@ import (
"github.com/eosswedenorg-go/haproxy/agentcheck"
)
func TestEosioV2Factory(t *testing.T) {
api := EosioV2Factory(ApiArguments{
Url: "https://api.v2.example.com",
Host: "host.example.com",
NumBlocks: 120,
})
expected := NewEosioV2("https://api.v2.example.com", "host.example.com", 120)
assert.IsType(t, expected, api)
assert.Equal(t, expected.client.Url, api.(EosioV2).client.Url)
assert.Equal(t, expected.client.Host, api.(EosioV2).client.Host)
assert.Equal(t, expected.offset, api.(EosioV2).offset)
}
func TestEosioV2LogInfo(t *testing.T) {
api := NewEosioV2("https://api.v2.example.com", "host.example.com", 120)

View file

@ -5,6 +5,24 @@ import (
"github.com/eosswedenorg-go/haproxy/agentcheck"
)
/**
* Generic struct that is passed to factory functions
* to configure the API request.
*/
type ApiArguments struct {
Url string
Host string
NumBlocks int
}
/**
* Factory function
*
* Each API must implement this function and process `args`
* returing a instance of it's implementation of the ApiInterface
*/
type Factory func(args ApiArguments) ApiInterface
type ApiInterface interface {
// Returns Logging information

View file

@ -8,32 +8,26 @@ import (
"github.com/eosswedenorg/eosio-api-healthcheck/src/api"
)
type arguments struct {
url string
host string
num_blocks int
}
func ParseArguments(args []string) api.ApiArguments {
func ParseArguments(args []string) arguments {
a := arguments{
num_blocks: 10,
a := api.ApiArguments{
NumBlocks: 10,
}
// 1. url (scheme + ip/domain + port)
a.url = args[0]
a.Url = args[0]
// 2. num blocks
if len(args) > 1 {
num, err := strconv.ParseInt(args[1], 10, 32)
if err == nil {
a.num_blocks = int(num)
a.NumBlocks = int(num)
}
}
// 3. Host
if len(args) > 2 {
a.host = args[2]
a.Host = args[2]
}
return a
@ -41,6 +35,13 @@ func ParseArguments(args []string) arguments {
func ParseRequest(request string) (api.ApiInterface, error) {
factories := map[string]api.Factory{
"v1": api.EosioV1Factory,
"v2": api.EosioV2Factory,
"contract": api.EosioContractFactory,
"debug": api.DebugApiFactory,
}
// Parse arguments.
// -------------------
p := strings.Split(strings.TrimSpace(request), "|")
@ -51,15 +52,8 @@ func ParseRequest(request string) (api.ApiInterface, error) {
a := ParseArguments(p[1:])
switch p[0] {
case "v1":
return api.NewEosioV1(a.url, a.host, float64(a.num_blocks / 2)), nil
case "v2":
return api.NewEosioV2(a.url, a.host, int64(a.num_blocks)), nil
case "contract":
return api.NewEosioContract(a.url, float64(a.num_blocks / 2)), nil
case "debug":
return api.NewDebugApi(a.url), nil
if factory, ok := factories[p[0]]; ok {
return factory(a), nil
}
return nil, fmt.Errorf("invalid API '%s'", p[0])