multi_feed #6
5 changed files with 55 additions and 3 deletions
|
|
@ -2,15 +2,16 @@ FROM golang:1.24
|
||||||
|
|
||||||
WORKDIR /app/kiki
|
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 config/* /app/kiki/config
|
||||||
COPY service/* /app/kiki/service
|
COPY service/* /app/kiki/service
|
||||||
COPY stacker/* /app/kiki/stacker
|
COPY stacker/* /app/kiki/stacker
|
||||||
COPY tooter/* /app/kiki/tooter
|
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" ]
|
CMD [ "/app/kiki/kiki", "run" ]
|
||||||
30
file_watcher/file_watcher.go
Normal file
30
file_watcher/file_watcher.go
Normal file
|
|
@ -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
|
||||||
|
}
|
||||||
3
file_watcher/go.mod
Normal file
3
file_watcher/go.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
module file_watcher
|
||||||
|
|
||||||
|
go 1.24.2
|
||||||
|
|
@ -8,10 +8,13 @@ replace kiki/stacker => ../stacker
|
||||||
|
|
||||||
replace kiki/tooter => ../tooter
|
replace kiki/tooter => ../tooter
|
||||||
|
|
||||||
|
replace kiki/file_watcher => ../file_watcher/
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/mattn/go-mastodon v0.0.9
|
github.com/mattn/go-mastodon v0.0.9
|
||||||
github.com/urfave/cli/v3 v3.2.0
|
github.com/urfave/cli/v3 v3.2.0
|
||||||
kiki/config v0.0.0-00010101000000-000000000000
|
kiki/config v0.0.0-00010101000000-000000000000
|
||||||
|
kiki/file_watcher v0.0.0-00010101000000-000000000000
|
||||||
kiki/stacker v0.0.0-00010101000000-000000000000
|
kiki/stacker v0.0.0-00010101000000-000000000000
|
||||||
kiki/tooter v0.0.0-00010101000000-000000000000
|
kiki/tooter v0.0.0-00010101000000-000000000000
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@ import (
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"kiki/config"
|
"kiki/config"
|
||||||
|
"kiki/file_watcher"
|
||||||
"kiki/stacker"
|
"kiki/stacker"
|
||||||
"kiki/tooter"
|
"kiki/tooter"
|
||||||
|
|
||||||
|
|
@ -55,13 +56,27 @@ func main() {
|
||||||
}
|
}
|
||||||
kikiConfig := config.GetKikiConfig(confFile)
|
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)
|
rdb := stacker.ConnectToRedis(kikiConfig.Redis.Address)
|
||||||
defer stacker.SaveRedis(rdb)
|
defer stacker.SaveRedis(rdb)
|
||||||
|
|
||||||
ticker := time.NewTicker(1 * time.Minute)
|
ticker := time.NewTicker(1 * time.Minute)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
for range ticker.C {
|
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)
|
newPosts := tooter.NewsText(kikiConfig.RSSUri)
|
||||||
|
|
||||||
for _, post := range newPosts {
|
for _, post := range newPosts {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue