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