0.1.3
parent
5f99ca837d
commit
ed13bf93aa
|
@ -1,3 +1,10 @@
|
||||||
|
# 0.1.3
|
||||||
|
|
||||||
|
## Feature
|
||||||
|
|
||||||
|
* Add cron job to client
|
||||||
|
* Client can report to server there name
|
||||||
|
|
||||||
# 0.1.2
|
# 0.1.2
|
||||||
|
|
||||||
## Fix
|
## Fix
|
||||||
|
|
15
Makefile
15
Makefile
|
@ -5,7 +5,7 @@ HUB=hub.kumoly.io
|
||||||
HUB_PROJECT=tools
|
HUB_PROJECT=tools
|
||||||
|
|
||||||
LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.Build=${BUILD} -w"
|
LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.Build=${BUILD} -w"
|
||||||
PLATFORMS=darwin linux windows
|
PLATFORMS=darwin linux
|
||||||
ARCHITECTURES=amd64
|
ARCHITECTURES=amd64
|
||||||
|
|
||||||
default: build
|
default: build
|
||||||
|
@ -20,16 +20,21 @@ clean:
|
||||||
build:
|
build:
|
||||||
go build ${LDFLAGS} -o dist/myip
|
go build ${LDFLAGS} -o dist/myip
|
||||||
|
|
||||||
build-bins:
|
build-unix:
|
||||||
$(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), \
|
$(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), \
|
||||||
$(shell export GOOS=$(GOOS); export GOARCH=$(GOARCH); go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_$(GOOS)_$(GOARCH)/$(PROJ))))
|
$(shell export GOOS=$(GOOS); export GOARCH=$(GOARCH); go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_$(GOOS)_$(GOARCH)/$(PROJ))))
|
||||||
|
|
||||||
build-m1:
|
build-win:
|
||||||
|
$(shell export GOOS=windows; export GOARCH=arm64; go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_windows_arm64/$(PROJ).exe)
|
||||||
|
|
||||||
|
build-mac-m1:
|
||||||
$(shell export GOOS=darwin; export GOARCH=arm64; go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_darwin_arm64/$(PROJ))
|
$(shell export GOOS=darwin; export GOARCH=arm64; go build ${LDFLAGS} -o dist/$(PROJ)_$(VERSION)_darwin_arm64/$(PROJ))
|
||||||
|
|
||||||
build-zip:
|
build-zip:
|
||||||
cd dist; for f in * ;do tar -czf $${f}.tar.gz $${f}; done
|
cd dist; for f in * ;do tar -czf $${f}.tar.gz $${f}; done
|
||||||
|
|
||||||
|
binary: build-unix build-win build-mac-m1
|
||||||
|
|
||||||
docker:
|
docker:
|
||||||
docker build --target builder -t $(HUB)/$(HUB_PROJECT)/$(PROJ):builder .
|
docker build --target builder -t $(HUB)/$(HUB_PROJECT)/$(PROJ):builder .
|
||||||
docker build \
|
docker build \
|
||||||
|
@ -45,6 +50,6 @@ docker-save:
|
||||||
docker save $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION) | gzip > dist/$(PROJ)-image-$(VERSION)-${BUILD}.tar.gz
|
docker save $(HUB)/$(HUB_PROJECT)/$(PROJ):$(VERSION) | gzip > dist/$(PROJ)-image-$(VERSION)-${BUILD}.tar.gz
|
||||||
|
|
||||||
|
|
||||||
release: clean build-bins build-m1 build-zip docker docker-save docker-push
|
release: clean binary build-zip docker docker-save docker-push
|
||||||
|
|
||||||
.PHONY: build docker release clean all
|
.PHONY: build docker release clean all binary install
|
16
README.md
16
README.md
|
@ -39,3 +39,19 @@ Server:
|
||||||
docker pull hub.kumoly.io/tools/myip:latest
|
docker pull hub.kumoly.io/tools/myip:latest
|
||||||
docker run --name myip-server -d -p 5080:5080 --restart=always hub.kumoly.io/tools/myip
|
docker run --name myip-server -d -p 5080:5080 --restart=always hub.kumoly.io/tools/myip
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## Cron
|
||||||
|
|
||||||
|
```
|
||||||
|
ield name | Mandatory? | Allowed values | Allowed special characters
|
||||||
|
---------- | ---------- | -------------- | --------------------------
|
||||||
|
Seconds | Yes | 0-59 | * / , -
|
||||||
|
Minutes | Yes | 0-59 | * / , -
|
||||||
|
Hours | Yes | 0-23 | * / , -
|
||||||
|
Day of month | Yes | 1-31 | * / , - ?
|
||||||
|
Month | Yes | 1-12 or JAN-DEC | * / , -
|
||||||
|
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
|
||||||
|
```
|
||||||
|
|
||||||
|
**Duration**: `myip -altc --cron --spec "@every 5m"`
|
||||||
|
|
|
@ -11,12 +11,14 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"text/tabwriter"
|
"text/tabwriter"
|
||||||
|
|
||||||
|
"github.com/robfig/cron/v3"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
port string
|
port string
|
||||||
host string
|
host string
|
||||||
|
name string
|
||||||
|
|
||||||
showTitle bool
|
showTitle bool
|
||||||
showList bool
|
showList bool
|
||||||
|
@ -25,19 +27,37 @@ var (
|
||||||
|
|
||||||
noPub bool
|
noPub bool
|
||||||
secure bool
|
secure bool
|
||||||
|
|
||||||
|
cronMode bool
|
||||||
|
cronSpec string
|
||||||
)
|
)
|
||||||
|
|
||||||
var ClientCmd = &cobra.Command{
|
var ClientCmd = &cobra.Command{
|
||||||
Use: "myip",
|
Use: "myip",
|
||||||
Short: "myip is a easy way to get public ip of current system.",
|
Short: "myip is a easy way to get public ip of current system.",
|
||||||
Run: func(cmd *cobra.Command, args []string) {
|
Run: func(cmd *cobra.Command, args []string) {
|
||||||
|
if name == "" {
|
||||||
|
name, _ = os.Hostname()
|
||||||
|
}
|
||||||
|
if cronMode {
|
||||||
|
block := make(chan struct{}, 1)
|
||||||
|
c := cron.New()
|
||||||
|
c.AddFunc(cronSpec, func() {
|
||||||
Scan()
|
Scan()
|
||||||
|
fmt.Println()
|
||||||
|
})
|
||||||
|
c.Start()
|
||||||
|
<-block
|
||||||
|
} else {
|
||||||
|
Scan()
|
||||||
|
}
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
ClientCmd.Flags().StringVarP(&port, "port", "p", "5080", "server port to connect")
|
ClientCmd.Flags().StringVarP(&port, "port", "p", "5080", "server port to connect")
|
||||||
ClientCmd.Flags().StringVarP(&host, "host", "u", "kumoly.io", "hostname to connect")
|
ClientCmd.Flags().StringVarP(&host, "host", "u", "kumoly.io", "hostname to connect")
|
||||||
|
ClientCmd.Flags().StringVarP(&name, "name", "n", "", "tell the server who you are")
|
||||||
|
|
||||||
ClientCmd.Flags().BoolVarP(&showList, "list", "l", false, "show list")
|
ClientCmd.Flags().BoolVarP(&showList, "list", "l", false, "show list")
|
||||||
ClientCmd.Flags().BoolVarP(&showTitle, "title", "t", false, "show title, used with --list")
|
ClientCmd.Flags().BoolVarP(&showTitle, "title", "t", false, "show title, used with --list")
|
||||||
|
@ -46,6 +66,9 @@ func init() {
|
||||||
|
|
||||||
ClientCmd.Flags().BoolVar(&noPub, "no-pub", false, "disable PublicIP")
|
ClientCmd.Flags().BoolVar(&noPub, "no-pub", false, "disable PublicIP")
|
||||||
ClientCmd.Flags().BoolVar(&secure, "secure", false, "use https")
|
ClientCmd.Flags().BoolVar(&secure, "secure", false, "use https")
|
||||||
|
|
||||||
|
ClientCmd.Flags().BoolVar(&cronMode, "cron", false, "run as cron service")
|
||||||
|
ClientCmd.Flags().StringVarP(&cronSpec, "spec", "s", "0 */5 * * * *", "hostname to connect")
|
||||||
}
|
}
|
||||||
|
|
||||||
func Scan() error {
|
func Scan() error {
|
||||||
|
@ -150,7 +173,7 @@ func GetPublicIP() (string, error) {
|
||||||
if secure {
|
if secure {
|
||||||
protocol = "https://"
|
protocol = "https://"
|
||||||
}
|
}
|
||||||
res, err := http.Get(protocol + host + ":" + port)
|
res, err := http.Get(protocol + host + ":" + port + "?name=" + name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Println(err)
|
log.Println(err)
|
||||||
return "", err
|
return "", err
|
||||||
|
|
|
@ -42,6 +42,7 @@ func StartServer() error {
|
||||||
ip = r.RemoteAddr
|
ip = r.RemoteAddr
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
r.Header.Add("X-Myip", ip)
|
||||||
fmt.Fprint(w, ip+"\n")
|
fmt.Fprint(w, ip+"\n")
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -55,7 +56,18 @@ func StartServer() error {
|
||||||
|
|
||||||
func simpleLogger(handler http.Handler) http.Handler {
|
func simpleLogger(handler http.Handler) http.Handler {
|
||||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||||
log.Printf("%s %s %s\n", r.RemoteAddr, r.Method, r.URL)
|
|
||||||
|
// for name, values := range r.Header {
|
||||||
|
// // Loop over all values for the name.
|
||||||
|
// for _, value := range values {
|
||||||
|
// fmt.Println(name, value)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
user := r.URL.Query().Get("name")
|
||||||
|
if user == "" {
|
||||||
|
user = r.URL.String()
|
||||||
|
}
|
||||||
|
log.Printf("%s %s %s %s\n", r.RemoteAddr, r.Method, user, r.Header.Get("User-Agent"))
|
||||||
handler.ServeHTTP(w, r)
|
handler.ServeHTTP(w, r)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
5
go.mod
5
go.mod
|
@ -2,7 +2,10 @@ module kumoly.io/tools/myip
|
||||||
|
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
require github.com/spf13/cobra v1.2.1
|
require (
|
||||||
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
|
github.com/spf13/cobra v1.2.1
|
||||||
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -192,6 +192,8 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
|
||||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs=
|
||||||
|
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||||
|
|
Loading…
Reference in New Issue