package deploy import ( "fmt" "strings" ) func FormatShardAdvert(region string, shardIndex int) string { return fmt.Sprintf("%s:%d", strings.TrimSpace(region), shardIndex) } func ParseShardAdvert(advert string) (region string, index int, ok bool) { advert = strings.TrimSpace(advert) colon := strings.LastIndex(advert, ":") if colon <= 0 { return "", 0, false } region = strings.TrimSpace(advert[:colon]) if _, err := fmt.Sscanf(strings.TrimSpace(advert[colon+1:]), "%d", &index); err != nil { return "", 0, false } return region, index, region != "" } func ResolveLocalAWSRegion(policyFallback string) string { if meta := ReadEC2InstanceMeta(); strings.TrimSpace(meta.Region) != "" { return strings.TrimSpace(meta.Region) } return strings.TrimSpace(policyFallback) } func cloudFrontShardURL(domain, token, region string, index int, shardHash string) string { domain = strings.TrimRight(strings.TrimSpace(domain), "/") shardHash = strings.TrimSpace(strings.ToLower(shardHash)) if domain == "" || token == "" || region == "" || shardHash == "" { return "" } if !strings.HasPrefix(domain, "http") { domain = "https://" + domain } return fmt.Sprintf("%s/shards/%s/%s/%d-%s.bin", domain, token, region, index, shardHash) }