Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 14 additions & 1 deletion internal/monitors/monitor_info.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,14 @@ func GetMonitorInfo(httpClient *http.Client, apiKey string, monitorId string) er

monitorConfig := resp.GetMonitor()
var monitor Monitor
var regions []monitorv1.Region
switch {
case monitorConfig.HasHttp():
monitor = httpMonitorToLocal(monitorConfig.GetHttp())
regions = monitorConfig.GetHttp().GetRegions()
case monitorConfig.HasTcp():
monitor = tcpMonitorToLocal(monitorConfig.GetTcp())
regions = monitorConfig.GetTcp().GetRegions()
default:
return fmt.Errorf("unknown monitor type")
}
Expand Down Expand Up @@ -80,7 +83,17 @@ func GetMonitorInfo(httpClient *http.Client, apiKey string, monitorId string) er
}

data = append(data, []string{"Frequency", monitor.Periodicity})
data = append(data, []string{"Locations", strings.Join(monitor.Regions, ",")})

// Group regions by provider and display each provider on its own row
regionGroups := groupRegionsByProvider(regions)
providers := []string{"Fly.io", "Koyeb", "Railway"}
for _, provider := range providers {
codes := regionGroups[provider]
if len(codes) > 0 {
data = append(data, []string{fmt.Sprintf("Locations (%s)", provider), strings.Join(codes, ", ")})
}
}

data = append(data, []string{"Active", fmt.Sprintf("%t", monitor.Active)})
data = append(data, []string{"Public", fmt.Sprintf("%t", monitor.Public)})

Expand Down
41 changes: 40 additions & 1 deletion internal/monitors/monitors.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"encoding/json"
"fmt"
"net/http"
"strings"

monitorv1 "buf.build/gen/go/openstatus/api/protocolbuffers/go/openstatus/monitor/v1"
"buf.build/gen/go/openstatus/api/connectrpc/gosimple/openstatus/monitor/v1/monitorv1connect"
Expand Down Expand Up @@ -100,6 +101,7 @@ func httpMethodToString(m monitorv1.HTTPMethod) string {
// regionToString converts SDK Region enum to string
func regionToString(r monitorv1.Region) string {
switch r {
// Fly.io regions
case monitorv1.Region_REGION_FLY_AMS:
return "ams"
case monitorv1.Region_REGION_FLY_ARN:
Expand Down Expand Up @@ -136,6 +138,22 @@ func regionToString(r monitorv1.Region) string {
return "syd"
case monitorv1.Region_REGION_FLY_YYZ:
return "yyz"
// Koyeb regions
case monitorv1.Region_REGION_KOYEB_SFO:
return "sfo"
case monitorv1.Region_REGION_KOYEB_WAS:
return "was"
case monitorv1.Region_REGION_KOYEB_FRA:
return "fra"
case monitorv1.Region_REGION_KOYEB_PAR:
return "par"
case monitorv1.Region_REGION_KOYEB_SIN:
return "sin"
case monitorv1.Region_REGION_KOYEB_TYO:
return "tyo"
// Railway regions
case monitorv1.Region_REGION_RAILWAY_US_WEST2:
return "us-west2"
default:
return r.String()
}
Expand All @@ -145,11 +163,32 @@ func regionToString(r monitorv1.Region) string {
func regionsToStrings(regions []monitorv1.Region) []string {
result := make([]string, len(regions))
for i, r := range regions {
result[i] = r.String()
result[i] = regionToString(r)
}
return result
}

// groupRegionsByProvider categorizes regions into Fly.io, Koyeb, and Railway groups
func groupRegionsByProvider(regions []monitorv1.Region) map[string][]string {
groups := map[string][]string{
"Fly.io": {},
"Koyeb": {},
"Railway": {},
}
for _, r := range regions {
code := regionToString(r)
switch {
case strings.HasPrefix(r.String(), "REGION_FLY_"):
groups["Fly.io"] = append(groups["Fly.io"], code)
case strings.HasPrefix(r.String(), "REGION_KOYEB_"):
groups["Koyeb"] = append(groups["Koyeb"], code)
case strings.HasPrefix(r.String(), "REGION_RAILWAY_"):
groups["Railway"] = append(groups["Railway"], code)
}
}
return groups
}

// Inverse converter functions (config types → SDK types)

// stringToPeriodicity converts config.Frequency to SDK Periodicity
Expand Down
Loading