diff --git a/smartcontract/sdk/go/serviceability/influx_test.go b/smartcontract/sdk/go/serviceability/influx_test.go index 36d8c2006..3948c6571 100644 --- a/smartcontract/sdk/go/serviceability/influx_test.go +++ b/smartcontract/sdk/go/serviceability/influx_test.go @@ -154,11 +154,11 @@ func TestToLineProtocol(t *testing.T) { "env": "testnet", }, expected: `links,code=link-01,contributor_pubkey=` + pubKey1B58 + - `,env=testnet,link_type=WAN,owner=` + pubKey1B58 + + `,env=testnet,link_desired_status=pending,link_type=WAN,owner=` + pubKey1B58 + `,pubkey=` + pubKey1B58 + `,side_a_iface_name=xe-0/0/0,side_a_pubkey=` + pubKey1B58 + `,side_z_iface_name=xe-0/0/1,side_z_pubkey=` + pubKey1B58 + - `,status=activated,tunnel_id=42,tunnel_net=172.16.0.0/24 bandwidth=1000,delay_ns=1e+06,delay_override_ns=2e+06,jitter_ns=500000,mtu=1500`, + `,status=activated,tunnel_id=42,tunnel_net=172.16.0.0/24 bandwidth=1000,delay_ns=1e+06,delay_override_ns=2e+06,jitter_ns=500000,link_health="pending",mtu=1500`, expectErr: false, }, { @@ -185,11 +185,11 @@ func TestToLineProtocol(t *testing.T) { "env": "testnet", }, expected: `links,code=link-empty,contributor_pubkey=` + pubKey1B58 + - `,env=testnet,link_type=DZX,owner=` + pubKey1B58 + + `,env=testnet,link_desired_status=pending,link_type=DZX,owner=` + pubKey1B58 + `,pubkey=` + pubKey1B58 + `,side_a_pubkey=` + pubKey1B58 + `,side_z_pubkey=` + pubKey1B58 + - `,status=pending,tunnel_id=7 bandwidth=0,delay_ns=0,delay_override_ns=0,jitter_ns=0,mtu=0`, + `,status=pending,tunnel_id=7 bandwidth=0,delay_ns=0,delay_override_ns=0,jitter_ns=0,link_health="pending",mtu=0`, expectErr: false, }, { diff --git a/smartcontract/sdk/go/serviceability/state.go b/smartcontract/sdk/go/serviceability/state.go index 2d8d6d957..0e1285fda 100644 --- a/smartcontract/sdk/go/serviceability/state.go +++ b/smartcontract/sdk/go/serviceability/state.go @@ -122,6 +122,7 @@ const ( DeviceStatusSuspended DeviceStatusDeleted DeviceStatusRejected + DeviceStatusDrained ) func (d DeviceStatus) String() string { @@ -131,6 +132,7 @@ func (d DeviceStatus) String() string { "suspended", "deleted", "rejected", + "drained", }[d] } @@ -138,6 +140,53 @@ func (d DeviceStatus) MarshalJSON() ([]byte, error) { return json.Marshal(d.String()) } +type DeviceHealth uint8 + +const ( + DeviceHealthPending DeviceHealth = iota + DeviceHealthReadyForLinks + DeviceHealthReadyForUsers + DeviceHealthImpaired +) + +func (d DeviceHealth) String() string { + return [...]string{ + "pending", + "ready_for_links", + "ready_for_users", + "impaired", + }[d] +} + +func (d DeviceHealth) MarshalJSON() ([]byte, error) { + return json.Marshal(d.String()) +} + +type DeviceDesiredStatus uint8 + +const ( + DeviceDesiredStatusPending DeviceDesiredStatus = iota + DeviceDesiredStatusActivated = 1 + DeviceDesiredStatusDrained = 6 +) + +func (d DeviceDesiredStatus) String() string { + switch d { + case DeviceDesiredStatusPending: + return "pending" + case DeviceDesiredStatusActivated: + return "activated" + case DeviceDesiredStatusDrained: + return "drained" + default: + return "unknown" + } +} + +func (d DeviceDesiredStatus) MarshalJSON() ([]byte, error) { + return json.Marshal(d.String()) +} + type InterfaceStatus uint8 const ( @@ -316,24 +365,26 @@ const CurrentInterfaceVersion = 2 type Device struct { AccountType AccountType - Owner [32]uint8 `influx:"tag,owner,pubkey"` - Index Uint128 `influx:"-"` - Bump_seed uint8 `influx:"-"` - LocationPubKey [32]uint8 `influx:"tag,location_pubkey,pubkey"` - ExchangePubKey [32]uint8 `influx:"tag,exchange_pubkey,pubkey"` - DeviceType DeviceDeviceType `influx:"tag,device_type"` - PublicIp [4]uint8 `influx:"tag,public_ip,ip"` - Status DeviceStatus `influx:"tag,status"` - Code string `influx:"tag,code"` - DzPrefixes [][5]uint8 `influx:"field,dz_prefixes,cidr"` - MetricsPublisherPubKey [32]uint8 `influx:"tag,metrics_publisher_pubkey,pubkey"` - ContributorPubKey [32]byte `influx:"tag,contributor_pubkey,pubkey"` - MgmtVrf string `influx:"field,mgmt_vrf"` - Interfaces []Interface `influx:"-"` - ReferenceCount uint32 `influx:"field,reference_count"` - UsersCount uint16 `influx:"field,users_count"` - MaxUsers uint16 `influx:"field,max_users"` - PubKey [32]byte `influx:"tag,pubkey,pubkey"` + Owner [32]uint8 `influx:"tag,owner,pubkey"` + Index Uint128 `influx:"-"` + Bump_seed uint8 `influx:"-"` + LocationPubKey [32]uint8 `influx:"tag,location_pubkey,pubkey"` + ExchangePubKey [32]uint8 `influx:"tag,exchange_pubkey,pubkey"` + DeviceType DeviceDeviceType `influx:"tag,device_type"` + PublicIp [4]uint8 `influx:"tag,public_ip,ip"` + Status DeviceStatus `influx:"tag,status"` + Code string `influx:"tag,code"` + DzPrefixes [][5]uint8 `influx:"field,dz_prefixes,cidr"` + MetricsPublisherPubKey [32]uint8 `influx:"tag,metrics_publisher_pubkey,pubkey"` + ContributorPubKey [32]byte `influx:"tag,contributor_pubkey,pubkey"` + MgmtVrf string `influx:"field,mgmt_vrf"` + Interfaces []Interface `influx:"-"` + ReferenceCount uint32 `influx:"field,reference_count"` + UsersCount uint16 `influx:"field,users_count"` + MaxUsers uint16 `influx:"field,max_users"` + DeviceHealth DeviceHealth `influx:"field,device_health"` + DeviceDesiredStatus DeviceDesiredStatus `influx:"tag,device_desired_status"` + PubKey [32]byte `influx:"tag,pubkey,pubkey"` } func (d Device) MarshalJSON() ([]byte, error) { @@ -350,6 +401,8 @@ func (d Device) MarshalJSON() ([]byte, error) { ContributorPubKey string `json:"ContributorPubKey"` PubKey string `json:"PubKey"` Status string `json:"Status"` + DeviceHealth string `json:"DeviceHealth"` + DeviceDesiredStatus string `json:"DeviceDesiredStatus"` }{ DeviceAlias: DeviceAlias(d), } @@ -369,6 +422,8 @@ func (d Device) MarshalJSON() ([]byte, error) { } jsonDevice.DzPrefixes = prefixes jsonDevice.Status = d.Status.String() + jsonDevice.DeviceHealth = d.DeviceHealth.String() + jsonDevice.DeviceDesiredStatus = d.DeviceDesiredStatus.String() return json.Marshal(jsonDevice) } @@ -425,27 +480,71 @@ func (l LinkStatus) MarshalJSON() ([]byte, error) { return json.Marshal(l.String()) } +type LinkHealth uint8 + +const ( + LinkHealthPending LinkHealth = iota + LinkHealthReadyForService + LinkHealthImpaired +) + +func (l LinkHealth) String() string { + return [...]string{ + "pending", + "ready_for_service", + "impaired", + }[l] +} + +func (l LinkHealth) MarshalJSON() ([]byte, error) { + return json.Marshal(l.String()) +} + +type LinkDesiredStatus uint8 + +const ( + LinkDesiredStatusPending LinkDesiredStatus = iota + LinkDesiredStatusActivated + LinkDesiredStatusHardDrained + LinkDesiredStatusSoftDrained +) + +func (l LinkDesiredStatus) String() string { + return [...]string{ + "pending", + "activated", + "hard-drained", + "soft-drained", + }[l] +} + +func (l LinkDesiredStatus) MarshalJSON() ([]byte, error) { + return json.Marshal(l.String()) +} + type Link struct { AccountType AccountType - Owner [32]uint8 `influx:"tag,owner,pubkey"` - Index Uint128 `influx:"-"` - Bump_seed uint8 `influx:"-"` - SideAPubKey [32]uint8 `influx:"tag,side_a_pubkey,pubkey"` - SideZPubKey [32]uint8 `influx:"tag,side_z_pubkey,pubkey"` - LinkType LinkLinkType `influx:"tag,link_type"` - Bandwidth uint64 `influx:"field,bandwidth"` - Mtu uint32 `influx:"field,mtu"` - DelayNs uint64 `influx:"field,delay_ns"` - JitterNs uint64 `influx:"field,jitter_ns"` - TunnelId uint16 `influx:"tag,tunnel_id"` - TunnelNet [5]uint8 `influx:"tag,tunnel_net,cidr"` - Status LinkStatus `influx:"tag,status"` - Code string `influx:"tag,code"` - ContributorPubKey [32]uint8 `influx:"tag,contributor_pubkey,pubkey"` - SideAIfaceName string `influx:"tag,side_a_iface_name"` - SideZIfaceName string `influx:"tag,side_z_iface_name"` - DelayOverrideNs uint64 `influx:"field,delay_override_ns"` - PubKey [32]byte `influx:"tag,pubkey,pubkey"` + Owner [32]uint8 `influx:"tag,owner,pubkey"` + Index Uint128 `influx:"-"` + Bump_seed uint8 `influx:"-"` + SideAPubKey [32]uint8 `influx:"tag,side_a_pubkey,pubkey"` + SideZPubKey [32]uint8 `influx:"tag,side_z_pubkey,pubkey"` + LinkType LinkLinkType `influx:"tag,link_type"` + Bandwidth uint64 `influx:"field,bandwidth"` + Mtu uint32 `influx:"field,mtu"` + DelayNs uint64 `influx:"field,delay_ns"` + JitterNs uint64 `influx:"field,jitter_ns"` + TunnelId uint16 `influx:"tag,tunnel_id"` + TunnelNet [5]uint8 `influx:"tag,tunnel_net,cidr"` + Status LinkStatus `influx:"tag,status"` + Code string `influx:"tag,code"` + ContributorPubKey [32]uint8 `influx:"tag,contributor_pubkey,pubkey"` + SideAIfaceName string `influx:"tag,side_a_iface_name"` + SideZIfaceName string `influx:"tag,side_z_iface_name"` + DelayOverrideNs uint64 `influx:"field,delay_override_ns"` + LinkHealth LinkHealth `influx:"field,link_health"` + LinkDesiredStatus LinkDesiredStatus `influx:"tag,link_desired_status"` + PubKey [32]byte `influx:"tag,pubkey,pubkey"` } func (l Link) MarshalJSON() ([]byte, error) { @@ -460,6 +559,8 @@ func (l Link) MarshalJSON() ([]byte, error) { ContributorPubKey string `json:"ContributorPubKey"` PubKey string `json:"PubKey"` Status string `json:"Status"` + LinkHealth string `json:"LinkHealth"` + LinkDesiredStatus string `json:"LinkDesiredStatus"` }{ LinkAlias: LinkAlias(l), } @@ -470,6 +571,8 @@ func (l Link) MarshalJSON() ([]byte, error) { jsonLink.ContributorPubKey = base58.Encode(l.ContributorPubKey[:]) jsonLink.PubKey = base58.Encode(l.PubKey[:]) jsonLink.Status = l.Status.String() + jsonLink.LinkHealth = l.LinkHealth.String() + jsonLink.LinkDesiredStatus = l.LinkDesiredStatus.String() jsonLink.TunnelNet = onChainNetToString(l.TunnelNet) diff --git a/smartcontract/sdk/go/serviceability/state_test.go b/smartcontract/sdk/go/serviceability/state_test.go index 98f31ccf9..a72aafec3 100644 --- a/smartcontract/sdk/go/serviceability/state_test.go +++ b/smartcontract/sdk/go/serviceability/state_test.go @@ -55,6 +55,8 @@ func TestCustomJSONMarshal(t *testing.T) { "Bump_seed": 255, "SideAPubKey": "` + dummyPubKeyB58 + `", "SideZPubKey": "` + dummyPubKeyB58 + `", + "LinkDesiredStatus":"pending", + "LinkHealth":"pending", "LinkType": "WAN", "Bandwidth": 1000000000, "Mtu": 1500, @@ -103,6 +105,8 @@ func TestCustomJSONMarshal(t *testing.T) { "Bump_seed": 1, "SideAPubKey": "` + dummyPubKeyB58 + `", "SideZPubKey": "` + dummyPubKeyB58 + `", + "LinkDesiredStatus":"pending", + "LinkHealth":"pending", "LinkType": "DZX", "Bandwidth": 2000000000, "Mtu": 9000, @@ -132,6 +136,8 @@ func TestCustomJSONMarshal(t *testing.T) { "Bump_seed": 0, "SideAPubKey": "11111111111111111111111111111111", "SideZPubKey": "11111111111111111111111111111111", + "LinkDesiredStatus":"pending", + "LinkHealth":"pending", "LinkType": "", "Bandwidth": 0, "Mtu": 0, @@ -191,6 +197,8 @@ func TestCustomJSONMarshal(t *testing.T) { "Bump_seed": 254, "LocationPubKey": "` + dummyPubKeyB58 + `", "ExchangePubKey": "` + dummyPubKeyB58 + `", + "DeviceDesiredStatus": "pending", + "DeviceHealth": "pending", "DeviceType": 1, "PublicIp": "8.8.8.8", "Status": "activated", @@ -273,6 +281,8 @@ func TestCustomJSONMarshal(t *testing.T) { "Bump_seed": 254, "LocationPubKey": "` + dummyPubKeyB58 + `", "ExchangePubKey": "` + dummyPubKeyB58 + `", + "DeviceDesiredStatus": "pending", + "DeviceHealth": "pending", "DeviceType": 1, "PublicIp": "8.8.8.8", "Status": "activated",