[READ-ONLY] Mirror of https://github.com/openstatusHQ/cli. OpenStatus CLI www.openstatus.dev
cli cli-app synthetic-monitoring
0

Configure Feed

Select the types of activity you want to include in your feed.

feat: improve monitor info output with grouped region display (#13)

Display regions grouped by provider (Fly.io, Koyeb, Railway) with short
codes instead of raw enum values for better readability.

- Add Koyeb and Railway region mappings to regionToString()
- Fix regionsToStrings() to use regionToString() for consistent short codes
- Add groupRegionsByProvider() to categorize regions by provider
- Update monitor info display to show each provider on its own row

+54 -2
+14 -1
internal/monitors/monitor_info.go
··· 34 34 35 35 monitorConfig := resp.GetMonitor() 36 36 var monitor Monitor 37 + var regions []monitorv1.Region 37 38 switch { 38 39 case monitorConfig.HasHttp(): 39 40 monitor = httpMonitorToLocal(monitorConfig.GetHttp()) 41 + regions = monitorConfig.GetHttp().GetRegions() 40 42 case monitorConfig.HasTcp(): 41 43 monitor = tcpMonitorToLocal(monitorConfig.GetTcp()) 44 + regions = monitorConfig.GetTcp().GetRegions() 42 45 default: 43 46 return fmt.Errorf("unknown monitor type") 44 47 } ··· 80 83 } 81 84 82 85 data = append(data, []string{"Frequency", monitor.Periodicity}) 83 - data = append(data, []string{"Locations", strings.Join(monitor.Regions, ",")}) 86 + 87 + // Group regions by provider and display each provider on its own row 88 + regionGroups := groupRegionsByProvider(regions) 89 + providers := []string{"Fly.io", "Koyeb", "Railway"} 90 + for _, provider := range providers { 91 + codes := regionGroups[provider] 92 + if len(codes) > 0 { 93 + data = append(data, []string{fmt.Sprintf("Locations (%s)", provider), strings.Join(codes, ", ")}) 94 + } 95 + } 96 + 84 97 data = append(data, []string{"Active", fmt.Sprintf("%t", monitor.Active)}) 85 98 data = append(data, []string{"Public", fmt.Sprintf("%t", monitor.Public)}) 86 99
+40 -1
internal/monitors/monitors.go
··· 5 5 "encoding/json" 6 6 "fmt" 7 7 "net/http" 8 + "strings" 8 9 9 10 monitorv1 "buf.build/gen/go/openstatus/api/protocolbuffers/go/openstatus/monitor/v1" 10 11 "buf.build/gen/go/openstatus/api/connectrpc/gosimple/openstatus/monitor/v1/monitorv1connect" ··· 100 101 // regionToString converts SDK Region enum to string 101 102 func regionToString(r monitorv1.Region) string { 102 103 switch r { 104 + // Fly.io regions 103 105 case monitorv1.Region_REGION_FLY_AMS: 104 106 return "ams" 105 107 case monitorv1.Region_REGION_FLY_ARN: ··· 136 138 return "syd" 137 139 case monitorv1.Region_REGION_FLY_YYZ: 138 140 return "yyz" 141 + // Koyeb regions 142 + case monitorv1.Region_REGION_KOYEB_SFO: 143 + return "sfo" 144 + case monitorv1.Region_REGION_KOYEB_WAS: 145 + return "was" 146 + case monitorv1.Region_REGION_KOYEB_FRA: 147 + return "fra" 148 + case monitorv1.Region_REGION_KOYEB_PAR: 149 + return "par" 150 + case monitorv1.Region_REGION_KOYEB_SIN: 151 + return "sin" 152 + case monitorv1.Region_REGION_KOYEB_TYO: 153 + return "tyo" 154 + // Railway regions 155 + case monitorv1.Region_REGION_RAILWAY_US_WEST2: 156 + return "us-west2" 139 157 default: 140 158 return r.String() 141 159 } ··· 145 163 func regionsToStrings(regions []monitorv1.Region) []string { 146 164 result := make([]string, len(regions)) 147 165 for i, r := range regions { 148 - result[i] = r.String() 166 + result[i] = regionToString(r) 149 167 } 150 168 return result 169 + } 170 + 171 + // groupRegionsByProvider categorizes regions into Fly.io, Koyeb, and Railway groups 172 + func groupRegionsByProvider(regions []monitorv1.Region) map[string][]string { 173 + groups := map[string][]string{ 174 + "Fly.io": {}, 175 + "Koyeb": {}, 176 + "Railway": {}, 177 + } 178 + for _, r := range regions { 179 + code := regionToString(r) 180 + switch { 181 + case strings.HasPrefix(r.String(), "REGION_FLY_"): 182 + groups["Fly.io"] = append(groups["Fly.io"], code) 183 + case strings.HasPrefix(r.String(), "REGION_KOYEB_"): 184 + groups["Koyeb"] = append(groups["Koyeb"], code) 185 + case strings.HasPrefix(r.String(), "REGION_RAILWAY_"): 186 + groups["Railway"] = append(groups["Railway"], code) 187 + } 188 + } 189 + return groups 151 190 } 152 191 153 192 // Inverse converter functions (config types → SDK types)