init
This commit is contained in:
commit
46bc9dd6ff
|
@ -0,0 +1,73 @@
|
||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"file_monitoring/config"
|
||||||
|
"git.hpds.cc/Component/logging"
|
||||||
|
"github.com/fsnotify/fsnotify"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ConfigFile string = "./config/config.yaml"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Run() *cobra.Command {
|
||||||
|
//创建一个监控对象
|
||||||
|
watch, err := fsnotify.NewWatcher()
|
||||||
|
if err != nil {
|
||||||
|
//log.Fatal(err)
|
||||||
|
logging.L().Error("new watcher err", zap.Error(err))
|
||||||
|
}
|
||||||
|
defer watch.Close()
|
||||||
|
//添加要监控的对象,文件或文件夹
|
||||||
|
err = watch.Add(config.DefaultMonitoringDirectory)
|
||||||
|
if err != nil {
|
||||||
|
logging.L().Error("new watcher err", zap.Error(err))
|
||||||
|
}
|
||||||
|
//我们另启一个goroutine来处理监控对象的事件
|
||||||
|
go func() {
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case ev := <-watch.Events:
|
||||||
|
{
|
||||||
|
//判断事件发生的类型,如下5种
|
||||||
|
// Create 创建
|
||||||
|
// Write 写入
|
||||||
|
// Remove 删除
|
||||||
|
// Rename 重命名
|
||||||
|
// Chmod 修改权限
|
||||||
|
if ev.Op&fsnotify.Create == fsnotify.Create {
|
||||||
|
logging.L().Info("创建文件", zap.String("文件名", ev.Name))
|
||||||
|
//log.Println("创建文件 : ", ev.Name)
|
||||||
|
}
|
||||||
|
if ev.Op&fsnotify.Write == fsnotify.Write {
|
||||||
|
logging.L().Info("写入文件", zap.String("文件名", ev.Name))
|
||||||
|
//log.Println("写入文件 : ", ev.Name)
|
||||||
|
}
|
||||||
|
if ev.Op&fsnotify.Remove == fsnotify.Remove {
|
||||||
|
logging.L().Info("删除文件", zap.String("文件名", ev.Name))
|
||||||
|
//log.Println("删除文件 : ", ev.Name)
|
||||||
|
}
|
||||||
|
if ev.Op&fsnotify.Rename == fsnotify.Rename {
|
||||||
|
logging.L().Info("重命名文件", zap.String("文件名", ev.Name))
|
||||||
|
//log.Println("重命名文件 : ", ev.Name)
|
||||||
|
}
|
||||||
|
if ev.Op&fsnotify.Chmod == fsnotify.Chmod {
|
||||||
|
logging.L().Info("修改权限", zap.String("文件名", ev.Name))
|
||||||
|
//log.Println("修改权限 : ", ev.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case err := <-watch.Errors:
|
||||||
|
{
|
||||||
|
log.Println("error : ", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
//循环
|
||||||
|
select {}
|
||||||
|
}
|
|
@ -0,0 +1,82 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.hpds.cc/Component/logging"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
MonitoringConf MonitoringDirectoryConfig
|
||||||
|
TransferConf TransferConfig
|
||||||
|
Log *logging.Logger
|
||||||
|
}
|
||||||
|
type MonitoringDirectoryConfig struct {
|
||||||
|
Path string `json:"path" yaml:"path" toml:"path"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type TransferConfig struct {
|
||||||
|
Proto string `json:"proto" yaml:"proto" toml:"proto"`
|
||||||
|
Address string `json:"address" yaml:"address" toml:"address"`
|
||||||
|
Port int `json:"port" yaml:"port" toml:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
DefaultMonitoringDirectory = "./tmp/"
|
||||||
|
|
||||||
|
DefaultTransfer = TransferConfig{
|
||||||
|
Proto: "MQTT",
|
||||||
|
Address: "127.0.0.1",
|
||||||
|
Port: 6060,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
// DefaultConfig return the default configuration.
|
||||||
|
// If config file is not provided, hpds_mqd will start with DefaultConfig.
|
||||||
|
func DefaultConfig() Config {
|
||||||
|
path, err := os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
vp := viper.New()
|
||||||
|
vp.AddConfigPath(".")
|
||||||
|
vp.AddConfigPath(path)
|
||||||
|
vp.AddConfigPath(path + "/cmd")
|
||||||
|
vp.AddConfigPath(path + "/config")
|
||||||
|
vp.SetConfigName("config")
|
||||||
|
vp.SetConfigType("yaml")
|
||||||
|
if err := vp.ReadInConfig(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
DefaultMonitoringDirectory = vp.GetString("path")
|
||||||
|
DefaultTransfer = TransferConfig{
|
||||||
|
Proto: vp.GetString("transfer.proto"),
|
||||||
|
Address: vp.GetString("transfer.address"),
|
||||||
|
Port: vp.GetInt("transfer.port"),
|
||||||
|
}
|
||||||
|
|
||||||
|
c := Config{
|
||||||
|
MonitoringConf: MonitoringDirectoryConfig{Path: DefaultMonitoringDirectory},
|
||||||
|
TransferConf: DefaultTransfer,
|
||||||
|
Log: ParseLoggingConfig(vp),
|
||||||
|
}
|
||||||
|
|
||||||
|
return c
|
||||||
|
}
|
||||||
|
|
||||||
|
func ParseLoggingConfig(vp *viper.Viper) *logging.Logger {
|
||||||
|
logger := logging.NewLogger(
|
||||||
|
logging.SetPath(vp.GetString("log.path")),
|
||||||
|
logging.SetPrefix(vp.GetString("log.prefix")),
|
||||||
|
logging.SetDevelopment(vp.GetBool("log.development")),
|
||||||
|
logging.SetDebugFileSuffix(vp.GetString("log.debugFileSuffix")),
|
||||||
|
logging.SetWarnFileSuffix(vp.GetString("log.warnFileSuffix")),
|
||||||
|
logging.SetErrorFileSuffix(vp.GetString("log.errorFileSuffix")),
|
||||||
|
logging.SetInfoFileSuffix(vp.GetString("log.infoFileSuffix")),
|
||||||
|
logging.SetMaxAge(vp.GetInt("log.maxAge")),
|
||||||
|
logging.SetMaxBackups(vp.GetInt("log.maxBackups")),
|
||||||
|
logging.SetMaxSize(vp.GetInt("log.maxSize")),
|
||||||
|
logging.SetLevel(logging.LogLevel[vp.GetString("log.level")]),
|
||||||
|
)
|
||||||
|
return logger
|
||||||
|
}
|
|
@ -0,0 +1,31 @@
|
||||||
|
path: "./tmp/"
|
||||||
|
|
||||||
|
transfer:
|
||||||
|
proto: "mqtt"
|
||||||
|
address: "127.0.0.1"
|
||||||
|
port: 6060
|
||||||
|
|
||||||
|
log:
|
||||||
|
# 日志级别:debug/info/error/warn
|
||||||
|
level: debug # debug | info | warn | error
|
||||||
|
path : "./logs"
|
||||||
|
# 日志文件前缀
|
||||||
|
prefix : "hpds_mq"
|
||||||
|
# 是否为开发者模式
|
||||||
|
development : true
|
||||||
|
# debug日志文件后缀
|
||||||
|
debugFileSuffix : "debug.log"
|
||||||
|
# warn日志文件后缀
|
||||||
|
warnFileSuffix : "warn.log"
|
||||||
|
# error日志文件后缀
|
||||||
|
errorFileSuffix : "error.log"
|
||||||
|
# info日志文件后缀
|
||||||
|
infoFileSuffix : "info.log"
|
||||||
|
# 保存的最大天数
|
||||||
|
maxAge : 180
|
||||||
|
# 最多存在多少个切片文件
|
||||||
|
maxBackups : 3000
|
||||||
|
# 日日志文件大小(M)
|
||||||
|
maxSize : 100
|
||||||
|
# whether to dump MQTT packet in debug level
|
||||||
|
dump_packet: false
|
|
@ -0,0 +1,7 @@
|
||||||
|
package config
|
||||||
|
|
||||||
|
// The git commit that was compiled. This will be filled in by the compiler.
|
||||||
|
var GitCommit string
|
||||||
|
|
||||||
|
// The main version number that is being run at the moment.
|
||||||
|
const Version = ""
|
|
@ -0,0 +1,33 @@
|
||||||
|
module file_monitoring
|
||||||
|
|
||||||
|
go 1.18
|
||||||
|
|
||||||
|
require (
|
||||||
|
git.hpds.cc/Component/logging v0.0.0-20220803091419-ba6a18ff2e88
|
||||||
|
github.com/fsnotify/fsnotify v1.5.4
|
||||||
|
github.com/spf13/cobra v1.5.0
|
||||||
|
github.com/spf13/viper v1.12.0
|
||||||
|
go.uber.org/zap v1.21.0
|
||||||
|
)
|
||||||
|
|
||||||
|
require (
|
||||||
|
github.com/hashicorp/hcl v1.0.0 // indirect
|
||||||
|
github.com/inconshreveable/mousetrap v1.0.0 // indirect
|
||||||
|
github.com/magiconair/properties v1.8.6 // indirect
|
||||||
|
github.com/mitchellh/mapstructure v1.5.0 // indirect
|
||||||
|
github.com/pelletier/go-toml v1.9.5 // indirect
|
||||||
|
github.com/pelletier/go-toml/v2 v2.0.1 // indirect
|
||||||
|
github.com/spf13/afero v1.8.2 // indirect
|
||||||
|
github.com/spf13/cast v1.5.0 // indirect
|
||||||
|
github.com/spf13/jwalterweatherman v1.1.0 // indirect
|
||||||
|
github.com/spf13/pflag v1.0.5 // indirect
|
||||||
|
github.com/subosito/gotenv v1.3.0 // indirect
|
||||||
|
go.uber.org/atomic v1.7.0 // indirect
|
||||||
|
go.uber.org/multierr v1.6.0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
|
||||||
|
golang.org/x/text v0.3.7 // indirect
|
||||||
|
gopkg.in/ini.v1 v1.66.4 // indirect
|
||||||
|
gopkg.in/natefinch/lumberjack.v2 v2.0.0 // indirect
|
||||||
|
gopkg.in/yaml.v2 v2.4.0 // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.0 // indirect
|
||||||
|
)
|
|
@ -0,0 +1,41 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"file_monitoring/cmd"
|
||||||
|
"file_monitoring/config"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
rootCmd = &cobra.Command{
|
||||||
|
Use: "file_monitoring",
|
||||||
|
Long: "file_monitoring is a file monitoring and transfer tool",
|
||||||
|
Version: config.Version,
|
||||||
|
}
|
||||||
|
enablePprof bool
|
||||||
|
pprofAddr = "127.0.0.1:6060"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
config.DefaultConfig()
|
||||||
|
rootCmd.PersistentFlags().StringVarP(&cmd.ConfigFile, "config", "c", cmd.ConfigFile, "The configuration file path")
|
||||||
|
rootCmd.AddCommand(cmd.Run())
|
||||||
|
//rootCmd.AddCommand(cmd.NewReloadCommand())
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
if enablePprof {
|
||||||
|
go func() {
|
||||||
|
http.ListenAndServe(pprofAddr, nil)
|
||||||
|
}()
|
||||||
|
}
|
||||||
|
if err := rootCmd.Execute(); err != nil {
|
||||||
|
fmt.Fprint(os.Stderr, err.Error())
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue