Создание запуска из командной строки и конвертации в файл
This commit is contained in:
parent
d3397d8e4c
commit
73013604c9
4
Makefile
4
Makefile
@ -1,8 +1,8 @@
|
|||||||
build:
|
build:
|
||||||
go build -v ./cmd/apisirius
|
go build -v ./cmd/sirius
|
||||||
|
|
||||||
run:
|
run:
|
||||||
go run ./cmd/apisirius
|
go run ./cmd/sirius
|
||||||
|
|
||||||
|
|
||||||
.DEFAULT_GOAL := build
|
.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 (
|
var (
|
||||||
|
apiPtr *bool
|
||||||
configPath string
|
configPath string
|
||||||
configFile string = "config"
|
configFile string = "config"
|
||||||
|
filePtr *bool
|
||||||
|
filePathConv string
|
||||||
|
fileConv string = "sirius.json"
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
apiPtr = flag.Bool("api", false, "Start Api Server")
|
||||||
flag.StringVar(&configPath, "conf-path", "configs", "path to config file 'config.yml'")
|
flag.StringVar(&configPath, "conf-path", "configs", "path to config file 'config.yml'")
|
||||||
flag.StringVar(&configFile, "conf-file", "config", "name file to config")
|
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) {
|
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
|
package file
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"os"
|
||||||
"net/http"
|
"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"
|
"gitstore.ru/tolikproh/sirius/internal/service"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Handler struct {
|
func FileConvert(srcFilePathName string) error {
|
||||||
log *logrus.Logger
|
|
||||||
cfg *model.Config
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
srcDir, srcFileName := path.Split(srcFilePathName)
|
||||||
TEXT_TYPES = map[string]interface{}{
|
|
||||||
"text/plain; charset=utf-8": nil,
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
func New(cfg *model.Config, log *logrus.Logger) *Handler {
|
dstFileName := strings.Split(srcFileName, ".")[0] + ".xlsx"
|
||||||
// HTTP Server
|
|
||||||
return &Handler{cfg: cfg, log: log}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (s *Handler) GinConvert(c *gin.Context) {
|
buffer, err := os.ReadFile(srcDir + srcFileName)
|
||||||
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")
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Errorf("session id: %s. error code: 001. %s", sessionId, err.Error())
|
return err
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
respBuff, err := service.SiriusConv(buffer)
|
respBuff, err := service.SiriusConv(buffer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
s.log.Errorf("session id: %s. error code: 004. %s", sessionId, err.Error())
|
return err
|
||||||
c.JSON(http.StatusBadRequest, gin.H{
|
|
||||||
"error": err.Error(),
|
|
||||||
})
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
|
|
||||||
c.Data(200, "application/vnd.ms-excel", respBuff.Bytes())
|
err = os.WriteFile(srcDir+dstFileName, respBuff.Bytes(), 0644)
|
||||||
|
if err != nil {
|
||||||
s.log.Printf("session id: %s.converted: ok. filename: %s; file size: %d bytes", sessionId, fileHeader.Filename, fileHeader.Size)
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user