From 66afe8eac72a996b1d65dfff5573f2d32d22cccf Mon Sep 17 00:00:00 2001 From: B4D_US3R Date: Wed, 30 Apr 2025 10:19:33 +0500 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D1=82=D1=81=D0=BB=D0=B5=D0=B6=D0=B8=D0=B2?= =?UTF-8?q?=D0=B0=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B9=20=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8?= =?UTF-8?q?=D0=B3=D0=B5.=20=D0=9F=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=BC=20=D0=BA=D0=B0=D0=BA=20=D0=B1=D1=83=D0=B4=D0=B5?= =?UTF-8?q?=D1=82=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 7 ++++--- file_watcher/file_watcher.go | 30 ++++++++++++++++++++++++++++++ file_watcher/go.mod | 3 +++ service/go.mod | 3 +++ service/kiki.go | 15 +++++++++++++++ 5 files changed, 55 insertions(+), 3 deletions(-) create mode 100644 file_watcher/file_watcher.go create mode 100644 file_watcher/go.mod diff --git a/Dockerfile b/Dockerfile index a6020e3..0ade8a6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,15 +2,16 @@ FROM golang:1.24 WORKDIR /app/kiki -RUN mkdir /app/kiki/config /app/kiki/service /app/kiki/stacker /app/kiki/tooter +RUN mkdir /app/kiki/config /app/kiki/service /app/kiki/stacker /app/kiki/tooter /app/kiki/file_watcher COPY config/* /app/kiki/config COPY service/* /app/kiki/service COPY stacker/* /app/kiki/stacker COPY tooter/* /app/kiki/tooter +COPY file_watcher/* /app/kiki/file_watcher -RUN cd service && go mod tidy && cd ../ +COPY Makefile /app/kiki/ -RUN go build -C ./service -o ../kiki +RUN make CMD [ "/app/kiki/kiki", "run" ] \ No newline at end of file diff --git a/file_watcher/file_watcher.go b/file_watcher/file_watcher.go new file mode 100644 index 0000000..52b8a98 --- /dev/null +++ b/file_watcher/file_watcher.go @@ -0,0 +1,30 @@ +package file_watcher + +import ( + "os" + "time" +) + +func IsFileChange(lastMod *time.Time, filename string) bool { + fileStat, err := os.Stat(filename) + + if err != nil { + return false + } + + if *lastMod != fileStat.ModTime() { + *lastMod = fileStat.ModTime() + return true + } else { + return false + } +} + +func GetFileModTime(filename string) (time.Time, error) { + fileStat, err := os.Stat(filename) + + if err != nil { + return time.Date(1970, 1, 1, 0, 0, 0, 0, time.UTC), err + } + return fileStat.ModTime(), nil +} diff --git a/file_watcher/go.mod b/file_watcher/go.mod new file mode 100644 index 0000000..760830b --- /dev/null +++ b/file_watcher/go.mod @@ -0,0 +1,3 @@ +module file_watcher + +go 1.24.2 diff --git a/service/go.mod b/service/go.mod index 7f97ff1..9475995 100644 --- a/service/go.mod +++ b/service/go.mod @@ -8,10 +8,13 @@ replace kiki/stacker => ../stacker replace kiki/tooter => ../tooter +replace kiki/file_watcher => ../file_watcher/ + require ( github.com/mattn/go-mastodon v0.0.9 github.com/urfave/cli/v3 v3.2.0 kiki/config v0.0.0-00010101000000-000000000000 + kiki/file_watcher v0.0.0-00010101000000-000000000000 kiki/stacker v0.0.0-00010101000000-000000000000 kiki/tooter v0.0.0-00010101000000-000000000000 ) diff --git a/service/kiki.go b/service/kiki.go index 420c0dd..bb462ce 100644 --- a/service/kiki.go +++ b/service/kiki.go @@ -9,6 +9,7 @@ import ( "time" "kiki/config" + "kiki/file_watcher" "kiki/stacker" "kiki/tooter" @@ -55,13 +56,27 @@ func main() { } kikiConfig := config.GetKikiConfig(confFile) + lastFileMod, err := file_watcher.GetFileModTime(confFile) + log.Println(lastFileMod) + + if err != nil { + log.Println(err) + } + rdb := stacker.ConnectToRedis(kikiConfig.Redis.Address) defer stacker.SaveRedis(rdb) ticker := time.NewTicker(1 * time.Minute) defer ticker.Stop() + for range ticker.C { + if file_watcher.IsFileChange(&lastFileMod, confFile) { + log.Println(lastFileMod) + log.Println("RSS ленты перечитаны") + kikiConfig.RSSUri = config.GetKikiConfig(confFile).RSSUri + } + newPosts := tooter.NewsText(kikiConfig.RSSUri) for _, post := range newPosts {