Создание запуска из командной строки и конвертации в файл
This commit is contained in:
parent
d3397d8e4c
commit
73013604c9
4
Makefile
4
Makefile
@ -1,8 +1,8 @@
|
||||
build:
|
||||
go build -v ./cmd/apisirius
|
||||
go build -v ./cmd/sirius
|
||||
|
||||
run:
|
||||
go run ./cmd/apisirius
|
||||
go run ./cmd/sirius
|
||||
|
||||
|
||||
.DEFAULT_GOAL := build
|
||||
|
15
README.md
Normal file
15
README.md
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
Онлайн конвертер конфураций ППКУП "Сириус" v1.03.022 (Болид)
|
||||
|
||||
Предназначен для конвертации сохраненой конфигурации c ППКУП "Сириус" v1.03.022 в формате "json", в удобно читаемый формат файла типа exel, для последующей работы с ним (например создании инструкций).
|
||||
|
||||
В выходном файле присутствуют поля. Номер зоны, Наименование зоны, Адреса прибора и шлейфы входящие в данную зону.
|
||||
|
||||
|
||||
Запуск конвертации из командной строки и из файла
|
||||
|
||||
./sirius --file --conv-path="./converts" --conv-file="sirius.json"
|
||||
|
||||
Запуск API Сервера
|
||||
|
||||
./sirius --api --conf-path="./configs" --conf-file="config.yml"
|
@ -1,27 +0,0 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"gitstore.ru/tolikproh/sirius/internal/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
cfg, err := initConfig()
|
||||
if err != nil {
|
||||
fmt.Printf("Error initializing configs file (configs set default): %s\n", err.Error())
|
||||
}
|
||||
|
||||
log := NewLogger(cfg)
|
||||
|
||||
app := server.New(cfg, log)
|
||||
|
||||
fmt.Printf("Start server on lister port: %s\n", cfg.Srv.Port)
|
||||
|
||||
if err := app.Run(); err != nil {
|
||||
log.Fatalf("%s", err.Error())
|
||||
}
|
||||
}
|
25
cmd/cli/main.go
Normal file
25
cmd/cli/main.go
Normal file
@ -0,0 +1,25 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
||||
wordPtr := flag.String("word", "foo", "a string")
|
||||
|
||||
numbPtr := flag.Int("numb", 42, "an int")
|
||||
forkPtr := flag.Bool("api", false, "Start Api Server")
|
||||
|
||||
var svar string
|
||||
flag.StringVar(&svar, "svar", "bar", "a string var")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
fmt.Println("word:", *wordPtr)
|
||||
fmt.Println("numb:", *numbPtr)
|
||||
fmt.Println("api:", *forkPtr)
|
||||
fmt.Println("svar:", svar)
|
||||
fmt.Println("tail:", flag.Args())
|
||||
}
|
@ -8,13 +8,21 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
configPath string
|
||||
configFile string = "config"
|
||||
apiPtr *bool
|
||||
configPath string
|
||||
configFile string = "config"
|
||||
filePtr *bool
|
||||
filePathConv string
|
||||
fileConv string = "sirius.json"
|
||||
)
|
||||
|
||||
func init() {
|
||||
apiPtr = flag.Bool("api", false, "Start Api Server")
|
||||
flag.StringVar(&configPath, "conf-path", "configs", "path to config file 'config.yml'")
|
||||
flag.StringVar(&configFile, "conf-file", "config", "name file to config")
|
||||
filePtr = flag.Bool("file", false, "File converted cli")
|
||||
flag.StringVar(&filePathConv, "conv-path", "converts", "path to converts file 'sirius.json'")
|
||||
flag.StringVar(&fileConv, "conv-file", "sirius.json", "name file to converting")
|
||||
}
|
||||
|
||||
func initConfig() (*model.Config, error) {
|
37
cmd/sirius/main.go
Normal file
37
cmd/sirius/main.go
Normal file
@ -0,0 +1,37 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
|
||||
"gitstore.ru/tolikproh/sirius/internal/controller/file"
|
||||
"gitstore.ru/tolikproh/sirius/internal/server"
|
||||
)
|
||||
|
||||
func main() {
|
||||
flag.Parse()
|
||||
|
||||
if *apiPtr {
|
||||
cfg, err := initConfig()
|
||||
if err != nil {
|
||||
fmt.Printf("Error initializing configs file (configs set default): %s\n", err.Error())
|
||||
}
|
||||
|
||||
log := NewLogger(cfg)
|
||||
|
||||
app := server.New(cfg, log)
|
||||
|
||||
fmt.Printf("Start server on lister port: %s\n", cfg.Srv.Port)
|
||||
|
||||
if err := app.Run(); err != nil {
|
||||
log.Fatalf("%s", err.Error())
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
if *filePtr {
|
||||
file.FileConvert(filePathConv + "/" + fileConv)
|
||||
return
|
||||
}
|
||||
fmt.Println("For help, used flags --help")
|
||||
}
|
16
init/sirius.service
Normal file
16
init/sirius.service
Normal file
@ -0,0 +1,16 @@
|
||||
[Unit]
|
||||
Description=Sirius
|
||||
After=syslog.target
|
||||
After=network.target
|
||||
After=nginx.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=root
|
||||
Group=root
|
||||
WorkingDirectory=/opt/sirius
|
||||
ExecStart=/opt/sirius/sirius --api
|
||||
Restart=always
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
@ -1,75 +1,33 @@
|
||||
package file
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
"github.com/sirupsen/logrus"
|
||||
"gitstore.ru/tolikproh/sirius/internal/model"
|
||||
"gitstore.ru/tolikproh/sirius/internal/service"
|
||||
)
|
||||
|
||||
type Handler struct {
|
||||
log *logrus.Logger
|
||||
cfg *model.Config
|
||||
}
|
||||
func FileConvert(srcFilePathName string) error {
|
||||
|
||||
var (
|
||||
TEXT_TYPES = map[string]interface{}{
|
||||
"text/plain; charset=utf-8": nil,
|
||||
}
|
||||
)
|
||||
srcDir, srcFileName := path.Split(srcFilePathName)
|
||||
|
||||
func New(cfg *model.Config, log *logrus.Logger) *Handler {
|
||||
// HTTP Server
|
||||
return &Handler{cfg: cfg, log: log}
|
||||
}
|
||||
dstFileName := strings.Split(srcFileName, ".")[0] + ".xlsx"
|
||||
|
||||
func (s *Handler) GinConvert(c *gin.Context) {
|
||||
sessionId := uuid.New().String()
|
||||
|
||||
s.log.Printf("start convert. session id: %s; user agent: %s; remote addr: %s; file size [byte]: %d",
|
||||
sessionId, c.Request.UserAgent(), c.Request.RemoteAddr, c.Request.ContentLength)
|
||||
|
||||
c.Request.Body = http.MaxBytesReader(c.Writer, c.Request.Body, s.cfg.Srv.MaxSizeFile<<20)
|
||||
|
||||
file, fileHeader, err := c.Request.FormFile("file")
|
||||
buffer, err := os.ReadFile(srcDir + srcFileName)
|
||||
if err != nil {
|
||||
s.log.Errorf("session id: %s. error code: 001. %s", sessionId, err.Error())
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"error": err.Error(),
|
||||
})
|
||||
return
|
||||
}
|
||||
defer file.Close()
|
||||
|
||||
buffer := make([]byte, fileHeader.Size)
|
||||
file.Read(buffer)
|
||||
|
||||
fileType := http.DetectContentType(buffer)
|
||||
|
||||
// Validate File Type
|
||||
if _, ex := TEXT_TYPES[fileType]; !ex {
|
||||
s.log.Errorf("session id: %s. error code: 002. formated data not text/plain", sessionId)
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"error": errors.New("formated data not text/plain").Error(),
|
||||
})
|
||||
return
|
||||
return err
|
||||
}
|
||||
|
||||
respBuff, err := service.SiriusConv(buffer)
|
||||
if err != nil {
|
||||
s.log.Errorf("session id: %s. error code: 004. %s", sessionId, err.Error())
|
||||
c.JSON(http.StatusBadRequest, gin.H{
|
||||
"error": err.Error(),
|
||||
})
|
||||
return
|
||||
return err
|
||||
}
|
||||
|
||||
c.Data(200, "application/vnd.ms-excel", respBuff.Bytes())
|
||||
|
||||
s.log.Printf("session id: %s.converted: ok. filename: %s; file size: %d bytes", sessionId, fileHeader.Filename, fileHeader.Size)
|
||||
err = os.WriteFile(srcDir+dstFileName, respBuff.Bytes(), 0644)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user