package main import ( "bufio" "bytes" "encoding/json" "errors" "fmt" "io/ioutil" "net/http" "os" ) var ( // TOKEN token TOKEN = "08bb51ff-1eb6-4167-8ed2-eb19fc343703" // MICROSERVICEURL url to microservie MICROSERVICEURL = "http://microservice01:8081/api/v1/documents/create?crptDocType=LP_INTRODUCE_OST" ) // Hello ... func Hello(name string) string { if name == "" { name = "World" } return fmt.Sprintf("Hello, %s", name) } // ParseFile ... func ParseFile(fileName string) ([]string, error) { if fileName == "" { return nil, errors.New("Empty file path") } file, err := os.Open(fileName) if err != nil { return nil, err } defer file.Close() scanner := bufio.NewScanner(file) var lines []string for scanner.Scan() { lines = append(lines, scanner.Text()) } return lines, nil } // SplitSlice ... func SplitSlice(lines []string) error { l := len(lines) max := 20 if l >= max { filesNum := l / max if l%max > 0 { filesNum++ } files := make([]string, filesNum) start := 0 end := max for i := 1; i <= filesNum; i++ { if start+max <= filesNum { end = start + max } else { end = start + l%max } fName := fmt.Sprintf("./out/part_%d.csv", i) if err := MakePartFile(lines[start:end], fName); err != nil { return err } files = append(files, fName) } for _, file := range files { SendToMicroservice(file) } } return nil } // SendToMicroservice ... func SendToMicroservice(fileName string) error { lines, err := ParseFile(fileName) if err != nil { return err } products := make([]Cis, 0) for _, line := range lines { if line != "" { cis := NewCis(line) products = append(products, cis) } } document := NewDocument("122323", products) data, err := json.Marshal(document) if err != nil { return err } req, err := http.NewRequest("POST", MICROSERVICEURL, bytes.NewBuffer(data)) if err != nil { return err } req.Header.Set("Content-Type", "application/json") req.Header.Set("token", TOKEN) client := http.Client{} resp, err := client.Do(req) if err != nil { return err } defer resp.Body.Close() fmt.Println("response Status:", resp.Status) fmt.Println("response Headers:", resp.Header) body, _ := ioutil.ReadAll(resp.Body) fmt.Println(string(body)) return nil } // MakePartFile ... func MakePartFile(lines []string, fName string) error { file, err := os.OpenFile(fName, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0755) if err != nil { return err } defer file.Close() for _, line := range lines { if _, err := file.WriteString(fmt.Sprintln(line)); err != nil { return err } } return nil } func main() { Hello("") lines, err := ParseFile("codes.csv") if err != nil { fmt.Println(err.Error()) } if err = SplitSlice(lines); err != nil { fmt.Println(err.Error()) } }