diff --git a/app/.air.toml b/app/.air.toml new file mode 100644 index 0000000..76416cf --- /dev/null +++ b/app/.air.toml @@ -0,0 +1,52 @@ +root = "." +testdata_dir = "testdata" +tmp_dir = "tmp" + +[build] + args_bin = [] + bin = "./tmp/main" + cmd = "go build -o ./tmp/main ." + delay = 1000 + exclude_dir = ["assets", "tmp", "vendor", "testdata"] + exclude_file = [] + exclude_regex = ["_test.go"] + exclude_unchanged = false + follow_symlink = false + full_bin = "" + include_dir = [] + include_ext = ["go", "tpl", "tmpl", "html"] + include_file = [] + kill_delay = "2s" + log = "build-errors.log" + poll = false + poll_interval = 0 + post_cmd = [] + pre_cmd = [] + rerun = false + rerun_delay = 500 + send_interrupt = true + stop_on_error = false + +[color] + app = "" + build = "yellow" + main = "magenta" + runner = "green" + watcher = "cyan" + +[log] + main_only = false + silent = false + time = false + +[misc] + clean_on_exit = false + +[proxy] + app_port = 0 + enabled = false + proxy_port = 0 + +[screen] + clear_on_rebuild = false + keep_scroll = true diff --git a/app/go.mod b/app/go.mod index cb268b8..5e59328 100644 --- a/app/go.mod +++ b/app/go.mod @@ -1,3 +1,13 @@ go 1.23 module github.com/zeevdiukman/test/app + +require github.com/miekg/dns v1.1.62 + +require ( + golang.org/x/mod v0.18.0 // indirect + golang.org/x/net v0.27.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.22.0 // indirect + golang.org/x/tools v0.22.0 // indirect +) diff --git a/app/go.sum b/app/go.sum new file mode 100644 index 0000000..95e8194 --- /dev/null +++ b/app/go.sum @@ -0,0 +1,12 @@ +github.com/miekg/dns v1.1.62 h1:cN8OuEF1/x5Rq6Np+h1epln8OiyPWV+lROx9LxcGgIQ= +github.com/miekg/dns v1.1.62/go.mod h1:mvDlcItzm+br7MToIKqkglaGhlFMHJ9DTNNWONWXbNQ= +golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= +golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= +golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= +golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= +golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= diff --git a/app/helper/go.mod b/app/helper/go.mod new file mode 100644 index 0000000..f36e861 --- /dev/null +++ b/app/helper/go.mod @@ -0,0 +1,12 @@ +module github.com/zeevdiukman/test/app/helper + +go 1.23.1 + +require github.com/gookit/goutil v0.6.16 + +require ( + github.com/gookit/color v1.5.4 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect + golang.org/x/sys v0.25.0 // indirect + golang.org/x/text v0.18.0 // indirect +) diff --git a/app/helper/go.sum b/app/helper/go.sum new file mode 100644 index 0000000..fe1db2d --- /dev/null +++ b/app/helper/go.sum @@ -0,0 +1,20 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= +github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +github.com/gookit/goutil v0.6.16 h1:9fRMCF4X9abdRD5+2HhBS/GwafjBlTUBjRtA5dgkvuw= +github.com/gookit/goutil v0.6.16/go.mod h1:op2q8AoPDFSiY2+qkHxcBWQMYxOLQ1GbLXqe7vrwscI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561 h1:MDc5xs78ZrZr3HMQugiXOAkSZtfTpbJLDr/lwfgO53E= +golang.org/x/exp v0.0.0-20220909182711-5c715a9e8561/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= +golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/app/helper/helper.go b/app/helper/helper.go new file mode 100644 index 0000000..77fb704 --- /dev/null +++ b/app/helper/helper.go @@ -0,0 +1,75 @@ +package helper + +import ( + "fmt" + "log" + "net" + "net/http" + "os" + "os/signal" + "runtime" + "strings" + "syscall" + + "github.com/gookit/goutil/dump" +) + +func IsIPAddr(ip string) bool { + ipaddr := net.ParseIP(NormaliseIPAddr(ip)) + return ipaddr != nil +} + +func NormaliseIPAddr(ip string) string { + if strings.HasSuffix(ip, "/32") && strings.Contains(ip, ".") { // single host (IPv4) + ip = strings.TrimSuffix(ip, "/32") + } else { + ip = strings.TrimSuffix(ip, "/128") // single host (IPv6) + } + + return ip +} + +// fqdn format to domain format +func FtoD(fqdn string) string { + return strings.TrimSuffix(fqdn, ".") +} + +func StartHTTP() { + log.Printf("Starting HTTP at :80") + http.ListenAndServe(":80", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintln(w, "DEV port 80 OK") + })) +} + +func P2(input ...any) { + dump.Print(input...) +} +func P(input ...any) { + fmt.Println(input...) +} + +func PrintOldStyleMetrics() { + runtime.GOMAXPROCS(4) + fmt.Printf("Operating system is: %s\n", runtime.GOOS) + // Get number of go routines, max os threads allocated to process and host number of cpus + numGoroutines := runtime.NumGoroutine() + fmt.Printf("The program is using %d go routines\n", numGoroutines) + maxThreads := runtime.GOMAXPROCS(0) + fmt.Printf("The program is configured to %d max threads ", maxThreads) + numCPUs := runtime.NumCPU() + fmt.Printf("- the host has %d cpus", numCPUs) + +} + +func Start(app func()) { + sigs := make(chan os.Signal, 1) + signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM) + // done := make(chan bool, 1) + + go func() { + app() + }() + + <-sigs + +} diff --git a/app/http.go b/app/http.go new file mode 100644 index 0000000..9ceebd9 --- /dev/null +++ b/app/http.go @@ -0,0 +1,18 @@ +package main + +import ( + "fmt" + "log" + "net/http" +) + +func runHTTP() { + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + fmt.Fprintf(w, "Hello, World!") + }) + log.Printf("Starting HTTP server on port 80") + err := http.ListenAndServe(":80", nil) + if err != nil { + log.Fatalf("Failed to start HTTP server: %s\n", err.Error()) + } +} diff --git a/app/main.go b/app/main.go index 6c7d337..4d554d9 100644 --- a/app/main.go +++ b/app/main.go @@ -1,7 +1,18 @@ package main -import "fmt" +import ( + "log" + "os" + "os/signal" +) func main() { - fmt.Println("MAIN") + // Run the HTTP and DNS servers concurrently + go runHTTP() + // go runDNS() + // Wait for SIGINT (Ctrl+C) to gracefully shut down the server + stop := make(chan os.Signal, 1) + signal.Notify(stop, os.Interrupt) + <-stop + log.Println("Shutting down the server...") } diff --git a/app/tmp/build-errors.log b/app/tmp/build-errors.log new file mode 100644 index 0000000..401a275 --- /dev/null +++ b/app/tmp/build-errors.log @@ -0,0 +1 @@ +exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1exit status 1 \ No newline at end of file diff --git a/app/tmp/main b/app/tmp/main new file mode 100755 index 0000000..ec6b6f5 Binary files /dev/null and b/app/tmp/main differ diff --git a/docker-compose.yml b/docker-compose.yml index 425fb07..14702b8 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -24,4 +24,4 @@ networks: ipam: config: - subnet: 10.10.10.0/24 - gateway: 10.10.10.254 + gateway: 10.10.10.254 \ No newline at end of file