generator.go 2.9 KB
Newer Older
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
1 2
package action

aaronchen2k2k's avatar
aaronchen2k2k 已提交
3
import (
aaronchen2k2k's avatar
aaronchen2k2k 已提交
4 5
	"encoding/json"
	"encoding/xml"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
6
	"fmt"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
7
	"github.com/easysoft/zendata/src/gen"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
8
	"github.com/easysoft/zendata/src/model"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
9
	constant "github.com/easysoft/zendata/src/utils/const"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
10
	i118Utils "github.com/easysoft/zendata/src/utils/i118"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
11
	logUtils "github.com/easysoft/zendata/src/utils/log"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
12
	"github.com/easysoft/zendata/src/utils/vari"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
13 14
	"github.com/fatih/color"
	"net/http"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
15 16
	"os"
	"path/filepath"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
17
	"strings"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
18
)
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
19

aaronchen2k2k's avatar
aaronchen2k2k 已提交
20
func Generate(deflt string, yml string, total int, fieldsToExportStr string, out string, format string, table string) {
21
	//startTime := time.Now().Unix()
aaronchen2k2k's avatar
aaronchen2k2k 已提交
22

aaronchen2k2k's avatar
aaronchen2k2k 已提交
23 24 25 26 27
	if deflt != "" && yml == "" {
		yml = deflt
		deflt = ""
	}

28 29 30 31 32
	fieldsToExport := make([]string, 0)
	if fieldsToExportStr != "" {
		fieldsToExport = strings.Split(fieldsToExportStr, ",")
	}

33 34 35
	vari.InputDir = filepath.Dir(yml) + string(os.PathSeparator)
	constant.Total = total

36
	rows, colTypes := gen.GenerateForDefinition(deflt, yml, &fieldsToExport, total)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
37 38
	var content string
	content, vari.JsonResp = Print(rows, format, table, colTypes, fieldsToExport)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
39

aaronchen2k2k's avatar
aaronchen2k2k 已提交
40 41 42
	if out != "" {
		WriteToFile(out, content)
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
43

aaronchen2k2k's avatar
aaronchen2k2k 已提交
44 45 46 47 48 49 50 51 52 53 54 55
	if out != "" {
		WriteToFile(out, content)
	}

	if vari.HttpService {
		logUtils.PrintToWithColor(i118Utils.I118Prt.Sprintf("press_to_exist"), color.FgCyan)

		http.HandleFunc("/", DataHandler)
		http.HandleFunc("/data", DataHandler)
		http.ListenAndServe(":58848", nil)
	}

56 57
	//entTime := time.Now().Unix()
	//logUtils.Screen(i118Utils.I118Prt.Sprintf("generate_records", len(rows), out, entTime - startTime ))
aaronchen2k2k's avatar
init  
aaronchen2k2k 已提交
58
}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
59

aaronchen2k2k's avatar
aaronchen2k2k 已提交
60
func Print(rows [][]string, format string, table string, colTypes []bool, fields []string) (string, string) {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
61 62 63 64
	content := ""
	sql := ""

	testData := model.TestData{}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
65
	testData.Title = "Test Data"
aaronchen2k2k's avatar
aaronchen2k2k 已提交
66

aaronchen2k2k's avatar
aaronchen2k2k 已提交
67
	for i, cols := range rows {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
68
		line := ""
aaronchen2k2k's avatar
aaronchen2k2k 已提交
69 70 71
		row := model.Row{}
		valueList := ""

aaronchen2k2k's avatar
aaronchen2k2k 已提交
72
		for j, col := range cols {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
73 74 75
			if j >0 && format == "sql" {
				line = line + ","
				valueList = valueList + ","
aaronchen2k2k's avatar
aaronchen2k2k 已提交
76 77
			}
			line = line + col
aaronchen2k2k's avatar
aaronchen2k2k 已提交
78 79 80 81 82 83

			row.Cols = append(row.Cols, col)

			colVal := col
			if !colTypes[j] { colVal = "'" + colVal + "'" }
			valueList = valueList + colVal
aaronchen2k2k's avatar
aaronchen2k2k 已提交
84
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
85

aaronchen2k2k's avatar
aaronchen2k2k 已提交
86 87 88
		if format == "text" && i < len(rows) {
			content = content + line + "\n"
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
89

aaronchen2k2k's avatar
aaronchen2k2k 已提交
90
		logUtils.Screen(fmt.Sprintf("%s", line))
aaronchen2k2k's avatar
aaronchen2k2k 已提交
91 92 93 94

		testData.Table.Rows = append(testData.Table.Rows, row)

		if format == "sql" {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
95 96 97 98 99 100
			fieldNames := make([]string, 0)

			for _, f := range fields {
				fieldNames = append(fieldNames, "`" + f + "`")
			}
			sent := fmt.Sprintf("INSERT INTO %s(%s) VALUES(%s)", table, strings.Join(fieldNames, ", "), valueList)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
101 102
			sql = sql + sent + ";\n"
		}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
103
	}
aaronchen2k2k's avatar
aaronchen2k2k 已提交
104

aaronchen2k2k's avatar
aaronchen2k2k 已提交
105 106 107 108 109 110 111 112 113 114
	jsonStr := "[]"
	if format == "json" || vari.HttpService {
		jsonObj, _ := json.Marshal(rows)
		content = string(jsonObj)
		if vari.HttpService {
			jsonStr = content
		}
	}

	if format == "xml" {
aaronchen2k2k's avatar
aaronchen2k2k 已提交
115 116 117 118 119 120
		xml, _ := xml.Marshal(testData)
		content = string(xml)
	} else if format == "sql" {
		content = sql
	}

aaronchen2k2k's avatar
aaronchen2k2k 已提交
121 122 123 124 125
	return content, jsonStr
}

func DataHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintln(w, vari.JsonResp)
aaronchen2k2k's avatar
aaronchen2k2k 已提交
126
}