0.1.3
parent
1241b21691
commit
574f628c4b
|
@ -1,3 +1,10 @@
|
|||
# 0.1.3
|
||||
|
||||
## Feature
|
||||
|
||||
* Add cron job to client
|
||||
* Client can report to server there name
|
||||
|
||||
# 0.1.2
|
||||
|
||||
## Fix
|
||||
|
|
15
Makefile
15
Makefile
|
@ -5,7 +5,7 @@ HUB=hub.kumoly.io
|
|||
HUB_PROJECT=tools
|
||||
|
||||
LDFLAGS=-ldflags "-X main.Version=${VERSION} -X main.Build=${BUILD} -w"
|
||||
PLATFORMS=darwin linux windows
|
||||
PLATFORMS=darwin linux
|
||||
ARCHITECTURES=amd64
|
||||
|
||||
default: build
|
||||
|
@ -20,16 +20,21 @@ clean:
|
|||
build:
|
||||
go build ${LDFLAGS} -o dist/myip
|
||||
|
||||
build-bins:
|
||||
build-unix:
|
||||
$(foreach GOOS, $(PLATFORMS), $(foreach GOARCH, $(ARCHITECTURES), \
|
||||
$(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))
|
||||
|
||||
build-zip:
|
||||
cd dist; for f in * ;do tar -czf $${f}.tar.gz $${f}; done
|
||||
|
||||
binary: build-unix build-win build-mac-m1
|
||||
|
||||
docker:
|
||||
docker build --target builder -t $(HUB)/$(HUB_PROJECT)/$(PROJ):builder .
|
||||
docker build \
|
||||
|
@ -45,6 +50,6 @@ docker-save:
|
|||
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 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"
|
||||
"text/tabwriter"
|
||||
|
||||
"github.com/robfig/cron/v3"
|
||||
"github.com/spf13/cobra"
|
||||
)
|
||||
|
||||
var (
|
||||
port string
|
||||
host string
|
||||
name string
|
||||
|
||||
showTitle bool
|
||||
showList bool
|
||||
|
@ -25,19 +27,37 @@ var (
|
|||
|
||||
noPub bool
|
||||
secure bool
|
||||
|
||||
cronMode bool
|
||||
cronSpec string
|
||||
)
|
||||
|
||||
var ClientCmd = &cobra.Command{
|
||||
Use: "myip",
|
||||
Short: "myip is a easy way to get public ip of current system.",
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
Scan()
|
||||
if name == "" {
|
||||
name, _ = os.Hostname()
|
||||
}
|
||||
if cronMode {
|
||||
block := make(chan struct{}, 1)
|
||||
c := cron.New()
|
||||
c.AddFunc(cronSpec, func() {
|
||||
Scan()
|
||||
fmt.Println()
|
||||
})
|
||||
c.Start()
|
||||
<-block
|
||||
} else {
|
||||
Scan()
|
||||
}
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
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(&name, "name", "n", "", "tell the server who you are")
|
||||
|
||||
ClientCmd.Flags().BoolVarP(&showList, "list", "l", false, "show 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(&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 {
|
||||
|
@ -150,7 +173,7 @@ func GetPublicIP() (string, error) {
|
|||
if secure {
|
||||
protocol = "https://"
|
||||
}
|
||||
res, err := http.Get(protocol + host + ":" + port)
|
||||
res, err := http.Get(protocol + host + ":" + port + "?name=" + name)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
return "", err
|
||||
|
|
|
@ -42,6 +42,7 @@ func StartServer() error {
|
|||
ip = r.RemoteAddr
|
||||
}
|
||||
}
|
||||
r.Header.Add("X-Myip", ip)
|
||||
fmt.Fprint(w, ip+"\n")
|
||||
})
|
||||
|
||||
|
@ -55,7 +56,18 @@ func StartServer() error {
|
|||
|
||||
func simpleLogger(handler http.Handler) http.Handler {
|
||||
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)
|
||||
})
|
||||
}
|
||||
|
|
5
go.mod
5
go.mod
|
@ -2,7 +2,10 @@ module kumoly.io/tools/myip
|
|||
|
||||
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 (
|
||||
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/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/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/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
|
|
Loading…
Reference in New Issue