generated from alecodes/base-template
feat: add basic miniflux conection
This commit is contained in:
parent
1459abdd84
commit
22b4abf73b
7 changed files with 173 additions and 6 deletions
|
|
@ -4,10 +4,11 @@ Copyright © 2024 NAME HERE <EMAIL ADDRESS>
|
|||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/viper"
|
||||
|
||||
"git.alecodes.page/alecodes/miniflux-archiver/internal/app"
|
||||
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
|
||||
)
|
||||
|
||||
var Services = []string{
|
||||
|
|
@ -28,8 +29,21 @@ var archiveCmd = &cobra.Command{
|
|||
Args: cobra.MatchAll(cobra.ExactArgs(1), cobra.OnlyValidArgs),
|
||||
ValidArgs: Services,
|
||||
Run: func(cmd *cobra.Command, args []string) {
|
||||
// service := args[0]
|
||||
fmt.Printf("%v", viper.AllSettings())
|
||||
service := args[0]
|
||||
|
||||
serviceConfig := app.ServiceConfig{
|
||||
Service: service,
|
||||
Host: service_host,
|
||||
User: service_user,
|
||||
Token: service_token,
|
||||
}
|
||||
|
||||
minifluxConfig := miniflux.MinifluxConfig{
|
||||
Host: viper.GetString("miniflux_host"),
|
||||
Token: viper.GetString("miniflux_token"),
|
||||
}
|
||||
|
||||
app.Archive(minifluxConfig, serviceConfig)
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
|||
5
go.mod
5
go.mod
|
|
@ -25,8 +25,9 @@ require (
|
|||
go.uber.org/atomic v1.9.0 // indirect
|
||||
go.uber.org/multierr v1.9.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect
|
||||
golang.org/x/sys v0.18.0 // indirect
|
||||
golang.org/x/text v0.14.0 // indirect
|
||||
golang.org/x/sys v0.27.0 // indirect
|
||||
golang.org/x/text v0.20.0 // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
miniflux.app/v2 v2.2.3 // indirect
|
||||
)
|
||||
|
|
|
|||
6
go.sum
6
go.sum
|
|
@ -67,8 +67,12 @@ golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjs
|
|||
golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k=
|
||||
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
|
||||
golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s=
|
||||
golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
|
||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
|
||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
|
||||
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
|
||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
|
|
@ -77,3 +81,5 @@ gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
|||
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
|
||||
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||
miniflux.app/v2 v2.2.3 h1:zY0nSSRApk2nT7oPK+1FctmAgYE3SZZMr/1fmAZYhBg=
|
||||
miniflux.app/v2 v2.2.3/go.mod h1:eawZVTTxQGXFhyOLem1798qDovYWqgoRgLa6hVigRWc=
|
||||
|
|
|
|||
17
internal/app/archive.go
Normal file
17
internal/app/archive.go
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
package app
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
|
||||
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
|
||||
"git.alecodes.page/alecodes/miniflux-archiver/internal/miniflux"
|
||||
)
|
||||
|
||||
func Archive(minifluxConfig miniflux.MinifluxConfig, serviceConfig ServiceConfig) {
|
||||
mf, err := miniflux.NewMiniflux(minifluxConfig)
|
||||
if err != nil {
|
||||
logger.Fatal("Could not connect to the miniflux server: %v", err)
|
||||
}
|
||||
|
||||
fmt.Println(mf)
|
||||
}
|
||||
8
internal/app/service.go
Normal file
8
internal/app/service.go
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
package app
|
||||
|
||||
type ServiceConfig struct {
|
||||
Service string
|
||||
Host string
|
||||
User string
|
||||
Token string
|
||||
}
|
||||
88
internal/logger/logger.go
Normal file
88
internal/logger/logger.go
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
package logger
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/viper"
|
||||
)
|
||||
|
||||
const (
|
||||
verbose = 1 << iota
|
||||
info
|
||||
error
|
||||
debug
|
||||
)
|
||||
|
||||
func getLogger(level int, prefix string) *log.Logger {
|
||||
var output io.Writer
|
||||
|
||||
if level == error {
|
||||
output = os.Stderr
|
||||
} else {
|
||||
output = os.Stdout
|
||||
}
|
||||
|
||||
// TODO: get from config
|
||||
configLevel := debug
|
||||
|
||||
if configLevel < level {
|
||||
output = io.Discard
|
||||
}
|
||||
|
||||
prefix = fmt.Sprintf("%-*s", 6, prefix)
|
||||
|
||||
logger := log.New(output, prefix, log.Ldate|log.Ltime|log.Lmicroseconds|log.Lmsgprefix)
|
||||
|
||||
return logger
|
||||
}
|
||||
|
||||
func logMessage(level string, message string) {
|
||||
currentLevel := viper.GetString("log_level")
|
||||
|
||||
levels := map[string]int{
|
||||
"verbose": 1,
|
||||
"info": 2,
|
||||
"error": 3,
|
||||
"debug": 4,
|
||||
}
|
||||
|
||||
if levels[currentLevel] <= levels[level] {
|
||||
timestamp := time.Now().Format("2006-01-02 15:04:05")
|
||||
prefix := strings.ToUpper(level)
|
||||
fmt.Printf("%-7s %s %s\n", prefix, timestamp, message)
|
||||
}
|
||||
}
|
||||
|
||||
func Verbose(message string) {
|
||||
logger := getLogger(verbose, "VERB")
|
||||
logger.Println(message)
|
||||
}
|
||||
|
||||
func Info(message string, args ...any) {
|
||||
logger := getLogger(info, "INFO")
|
||||
msg := fmt.Sprintf(message, args...)
|
||||
logger.Println(msg)
|
||||
}
|
||||
|
||||
func Error(message string, args ...any) {
|
||||
logger := getLogger(error, "ERROR")
|
||||
msg := fmt.Sprintf(message, args...)
|
||||
logger.Println(msg)
|
||||
}
|
||||
|
||||
func Debug(message string, args ...any) {
|
||||
logger := getLogger(debug, "DEBUG")
|
||||
msg := fmt.Sprintf(message, args...)
|
||||
logger.Println(msg)
|
||||
}
|
||||
|
||||
func Fatal(message string, args ...any) {
|
||||
logger := getLogger(error, "FATAL")
|
||||
msg := fmt.Sprintf(message, args...)
|
||||
logger.Fatalln(msg)
|
||||
}
|
||||
33
internal/miniflux/miniflux.go
Normal file
33
internal/miniflux/miniflux.go
Normal file
|
|
@ -0,0 +1,33 @@
|
|||
package miniflux
|
||||
|
||||
import (
|
||||
"git.alecodes.page/alecodes/miniflux-archiver/internal/logger"
|
||||
mfApi "miniflux.app/v2/client"
|
||||
)
|
||||
|
||||
type MinifluxConfig struct {
|
||||
Host string
|
||||
User string
|
||||
Token string
|
||||
}
|
||||
|
||||
type Miniflux struct {
|
||||
MinifluxConfig
|
||||
client *mfApi.Client
|
||||
}
|
||||
|
||||
func NewMiniflux(config MinifluxConfig) (*Miniflux, error) {
|
||||
mf := &Miniflux{
|
||||
MinifluxConfig: config,
|
||||
client: mfApi.NewClient(config.Host, config.Token),
|
||||
}
|
||||
|
||||
version, err := mf.client.Version()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
logger.Info("Miniflux server version: %v", version.Version)
|
||||
|
||||
return mf, nil
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue