in pkg/genlib/fields/load.go [129:231]
func getFieldsFilesAndDataStreamType(ctx context.Context, baseURL, integration, dataStream, version string) ([]byte, string, error) {
packageURL, err := makePackageURL(baseURL, integration, version)
if err != nil {
return nil, "", err
}
r, err := getFromURL(ctx, packageURL.String())
if err != nil {
return nil, "", err
}
var downloadPayload struct {
Download string `json:"download"`
}
body, err := ioutil.ReadAll(r)
if err = json.Unmarshal(body, &downloadPayload); err != nil {
return nil, "", err
}
downloadURL, err := makeDownloadURL(baseURL, downloadPayload.Download)
r, err = getFromURL(ctx, downloadURL.String())
defer func(r io.ReadCloser) {
if r != nil {
_ = r.Close()
}
}(r)
if err != nil {
return nil, "", err
}
zipContent, err := ioutil.ReadAll(r)
if err != nil {
return nil, "", err
}
archive, err := zip.NewReader(bytes.NewReader(zipContent), int64(len(zipContent)))
if err != nil {
return nil, "", err
}
prefixFieldsPath := path.Join(fmt.Sprintf("%s-%s", integration, version), dataStreamSlug, dataStream, fieldsSlug)
manifestPath := path.Join(fmt.Sprintf("%s-%s", integration, version), dataStreamSlug, dataStream, manifestSlug)
var dataStreamType string
var fieldsContent string
for _, z := range archive.File {
if z.FileInfo().IsDir() {
continue
}
if !strings.HasPrefix(z.Name, prefixFieldsPath) && !strings.HasPrefix(z.Name, manifestPath) {
continue
}
fieldsFileName := z.Name
zr, err := z.Open()
if err != nil {
if zr != nil {
_ = zr.Close()
}
return nil, "", err
}
fieldsFileContent, err := ioutil.ReadAll(zr)
if err != nil {
if zr != nil {
_ = zr.Close()
}
return nil, "", err
}
_ = zr.Close()
if strings.HasPrefix(z.Name, prefixFieldsPath) {
key := strings.TrimSuffix(filepath.Base(fieldsFileName), filepath.Ext(fieldsFileName))
keyEntry := fmt.Sprintf("- key: %s\n fields:\n", key)
for _, line := range strings.Split(string(fieldsFileContent), "\n") {
keyEntry += ` ` + line + "\n"
}
fieldsContent += keyEntry
}
if strings.HasPrefix(z.Name, manifestPath) {
var manifest yamlManifest
cfg, err := yaml.NewConfig(fieldsFileContent)
if err != nil {
return nil, "", err
}
err = cfg.Unpack(&manifest)
if err != nil {
return nil, "", err
}
dataStreamType = manifest.Type
}
}
return []byte(fieldsContent), dataStreamType, nil
}