aboutsummaryrefslogtreecommitdiff
path: root/web
diff options
context:
space:
mode:
authorXe Iaso <me@xeiaso.net>2023-11-10 13:55:42 -0500
committerXe Iaso <me@xeiaso.net>2023-11-10 13:55:56 -0500
commit9eda2ab57e642a0628b73bc0a9b7be13d12fbae4 (patch)
tree4856a58c167126065382c4bf00237e6806e3fd72 /web
parent38966c9ca9611087c901f5029046139d9b7f003e (diff)
downloadx-9eda2ab57e642a0628b73bc0a9b7be13d12fbae4.tar.xz
x-9eda2ab57e642a0628b73bc0a9b7be13d12fbae4.zip
web/fly: start flydns client
Signed-off-by: Xe Iaso <me@xeiaso.net>
Diffstat (limited to 'web')
-rw-r--r--web/fly/flydns/flydns.go97
-rw-r--r--web/fly/flydns/flydns_test.go17
2 files changed, 114 insertions, 0 deletions
diff --git a/web/fly/flydns/flydns.go b/web/fly/flydns/flydns.go
new file mode 100644
index 0000000..7c34f14
--- /dev/null
+++ b/web/fly/flydns/flydns.go
@@ -0,0 +1,97 @@
+package flydns
+
+import (
+ "fmt"
+ "net"
+ "net/netip"
+ "strings"
+)
+
+func GetAppAddresses(appName string) ([]netip.Addr, error) {
+ addrs, err := net.LookupAddr(fmt.Sprintf("%s.internal", appName))
+ if err != nil {
+ return nil, err
+ }
+
+ var result []netip.Addr
+
+ for _, addr := range addrs {
+ ip, err := netip.ParseAddr(addr)
+ if err != nil {
+ return nil, err
+ }
+
+ result = append(result, ip)
+ }
+
+ return result, nil
+}
+
+func GetIndividualInstanceAddress(instanceID string, appName string) (netip.Addr, error) {
+ var ip netip.Addr
+ addr, err := net.LookupAddr(fmt.Sprintf("%s.vm.%s.internal", instanceID, appName))
+ if err != nil {
+ return ip, err
+ }
+
+ ip, err = netip.ParseAddr(addr[0])
+ if err != nil {
+ return ip, err
+ }
+
+ return ip, nil
+}
+
+func GetAppInstancesInRegion(appName string, region string) ([]netip.Addr, error) {
+ instances, err := net.LookupHost(fmt.Sprintf("%s.%s.internal", appName, region))
+ if err != nil {
+ return nil, err
+ }
+
+ var result []netip.Addr
+
+ for _, instance := range instances {
+ ip, err := netip.ParseAddr(instance)
+ if err != nil {
+ return nil, err
+ }
+
+ result = append(result, ip)
+ }
+
+ return result, nil
+}
+
+func GetClosestInstances(appName string, count int) ([]netip.Addr, error) {
+ instances, err := net.LookupHost(fmt.Sprintf("top%d.nearest.of.%s.internal", count, appName))
+ if err != nil {
+ return nil, err
+ }
+
+ var result []netip.Addr
+
+ for _, instance := range instances {
+ ip, err := netip.ParseAddr(instance)
+ if err != nil {
+ return nil, err
+ }
+
+ result = append(result, ip)
+ }
+
+ return result, nil
+}
+
+func GetApps() ([]string, error) {
+ appString, err := net.LookupTXT("_apps.internal")
+ if err != nil {
+ return nil, err
+ }
+
+ var result []string
+ for _, resp := range appString {
+ result = append(result, strings.Split(resp, ",")...)
+ }
+
+ return result, nil
+}
diff --git a/web/fly/flydns/flydns_test.go b/web/fly/flydns/flydns_test.go
new file mode 100644
index 0000000..c566461
--- /dev/null
+++ b/web/fly/flydns/flydns_test.go
@@ -0,0 +1,17 @@
+package flydns
+
+import (
+ "testing"
+)
+
+func TestGetApps(t *testing.T) {
+ // Call the function to be tested
+ result, err := GetApps()
+
+ t.Logf("%v", result)
+
+ // Check for the error
+ if err != nil {
+ t.Errorf("Expected no error, but got an error: %v", err)
+ }
+}