Skip to content

Commit b43a24f

Browse files
author
Andrea Spacca
authored
Merge pull request #34 from aspacca/v2_package_registry
download zip package and load field yml from it
2 parents 0e15686 + 84aa649 commit b43a24f

File tree

3 files changed

+86
-75
lines changed

3 files changed

+86
-75
lines changed

pkg/genlib/fields/cache.go

Lines changed: 0 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import (
44
"context"
55
"golang.org/x/sync/semaphore"
66
"sync"
7-
8-
"github.com/elastic/go-ucfg/yaml"
97
)
108

119
const (
@@ -98,48 +96,3 @@ func (f *Cache) LoadFields(ctx context.Context, integration, stream, version str
9896

9997
return flds, nil
10098
}
101-
102-
func (f *Cache) LoadManifest(ctx context.Context, integration, stream, version string) (*Manifest, error) {
103-
var err error
104-
105-
t := tuple{
106-
integration: integration,
107-
stream: stream,
108-
version: version,
109-
}
110-
111-
f.mut.RLock()
112-
manifest, ok := f.manifest[t]
113-
f.mut.RUnlock()
114-
115-
if ok {
116-
return &manifest, nil
117-
}
118-
119-
// Pull the manifest file
120-
url, err := makeManifestURL(f.baseUrl, integration, stream, version)
121-
if err != nil {
122-
return nil, err
123-
}
124-
125-
data, err := getFromURL(ctx, url.String())
126-
if err != nil {
127-
return nil, err
128-
}
129-
130-
// deserialize
131-
cfg, err := yaml.NewConfig(data)
132-
if err != nil {
133-
return nil, err
134-
}
135-
err = cfg.Unpack(&manifest)
136-
if err != nil {
137-
return nil, err
138-
}
139-
140-
f.mut.Lock()
141-
f.manifest[t] = manifest
142-
f.mut.Unlock()
143-
144-
return &manifest, nil
145-
}

pkg/genlib/fields/load.go

Lines changed: 78 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package fields
22

33
import (
4+
"archive/zip"
5+
"bytes"
46
"context"
57
"encoding/json"
68
"errors"
79
"fmt"
10+
"io"
811
"io/ioutil"
912
"net/http"
1013
"net/url"
@@ -26,12 +29,7 @@ const (
2629

2730
func LoadFields(ctx context.Context, baseURL, integration, dataStream, version string) (Fields, error) {
2831

29-
packageURL, err := makePackageURL(baseURL, integration, version)
30-
if err != nil {
31-
return nil, err
32-
}
33-
34-
fieldsContent, err := getFieldsFiles(ctx, packageURL, dataStream)
32+
fieldsContent, err := getFieldsFiles(ctx, baseURL, integration, dataStream, version)
3533
if err != nil {
3634
return nil, err
3735
}
@@ -61,42 +59,92 @@ func makePackageURL(baseURL, integration, version string) (*url.URL, error) {
6159
return u, nil
6260
}
6361

64-
func getFieldsFiles(ctx context.Context, packageURL *url.URL, dataStream string) ([]byte, error) {
65-
body, err := getFromURL(ctx, packageURL.String())
62+
func makeDownloadURL(baseURL, donwloadPath string) (*url.URL, error) {
63+
64+
u, err := url.Parse(baseURL)
65+
if err != nil {
66+
return nil, err
67+
}
68+
69+
u.Path = path.Join(u.Path, donwloadPath)
70+
return u, nil
71+
}
72+
73+
func getFieldsFiles(ctx context.Context, baseURL, integration, dataStream, version string) ([]byte, error) {
74+
packageURL, err := makePackageURL(baseURL, integration, version)
6675
if err != nil {
6776
return nil, err
6877
}
6978

70-
var assetsPayload struct {
71-
Assets []string `json:"assets"`
79+
r, err := getFromURL(ctx, packageURL.String())
80+
if err != nil {
81+
return nil, err
7282
}
7383

74-
if err = json.Unmarshal(body, &assetsPayload); err != nil {
84+
var downloadPayload struct {
85+
Download string `json:"download"`
86+
}
87+
88+
body, err := ioutil.ReadAll(r)
89+
if err = json.Unmarshal(body, &downloadPayload); err != nil {
7590
return nil, err
7691
}
7792

78-
fieldsFilesURL := make([]string, 0)
79-
prefixFieldsPath := path.Join(packageURL.Path, dataStreamSlug, dataStream, fieldsSlug)
80-
for _, assetPath := range assetsPayload.Assets {
81-
if !strings.HasPrefix(assetPath, prefixFieldsPath) {
82-
continue
93+
downloadURL, err := makeDownloadURL(baseURL, downloadPayload.Download)
94+
r, err = getFromURL(ctx, downloadURL.String())
95+
defer func(r io.ReadCloser) {
96+
if r != nil {
97+
_ = r.Close()
8398
}
99+
}(r)
100+
101+
if err != nil {
102+
return nil, err
103+
}
84104

85-
fieldsFilesURL = append(fieldsFilesURL, assetPath)
105+
zipContent, err := ioutil.ReadAll(r)
106+
if err != nil {
107+
return nil, err
86108
}
87109

110+
archive, err := zip.NewReader(bytes.NewReader(zipContent), int64(len(zipContent)))
111+
if err != nil {
112+
return nil, err
113+
}
114+
115+
prefixFieldsPath := path.Join(fmt.Sprintf("%s-%s", integration, version), dataStreamSlug, dataStream, fieldsSlug)
116+
88117
var fieldsContent string
89-
for _, fieldsFileURL := range fieldsFilesURL {
90-
packageURL.Path = fieldsFileURL
118+
for _, z := range archive.File {
119+
if z.FileInfo().IsDir() {
120+
continue
121+
}
91122

92-
body, err := getFromURL(ctx, packageURL.String())
123+
if !strings.HasPrefix(z.Name, prefixFieldsPath) {
124+
continue
125+
}
126+
127+
fieldsFileName := z.Name
128+
zr, err := z.Open()
93129
if err != nil {
130+
if zr != nil {
131+
_ = zr.Close()
132+
}
94133
return nil, err
95134
}
96135

97-
key := strings.TrimSuffix(filepath.Base(fieldsFileURL), filepath.Ext(fieldsFileURL))
136+
fieldsFileContent, err := ioutil.ReadAll(zr)
137+
if err != nil {
138+
if zr != nil {
139+
_ = zr.Close()
140+
}
141+
return nil, err
142+
}
143+
144+
_ = zr.Close()
145+
key := strings.TrimSuffix(filepath.Base(fieldsFileName), filepath.Ext(fieldsFileName))
98146
keyEntry := fmt.Sprintf("- key: %s\n fields:\n", key)
99-
for _, line := range strings.Split(string(body), "\n") {
147+
for _, line := range strings.Split(string(fieldsFileContent), "\n") {
100148
keyEntry += ` ` + line + "\n"
101149
}
102150

@@ -106,7 +154,7 @@ func getFieldsFiles(ctx context.Context, packageURL *url.URL, dataStream string)
106154
return []byte(fieldsContent), nil
107155
}
108156

109-
func getFromURL(ctx context.Context, srcURL string) ([]byte, error) {
157+
func getFromURL(ctx context.Context, srcURL string) (io.ReadCloser, error) {
110158

111159
req, err := http.NewRequestWithContext(ctx, "GET", srcURL, nil)
112160

@@ -116,18 +164,21 @@ func getFromURL(ctx context.Context, srcURL string) ([]byte, error) {
116164

117165
client := &http.Client{}
118166
resp, err := client.Do(req)
119-
120167
if err != nil {
168+
if resp.Body != nil {
169+
_ = resp.Body.Close()
170+
}
121171
return nil, err
122172
}
123173

124-
defer resp.Body.Close()
125-
126174
if resp.StatusCode != http.StatusOK {
175+
if resp.Body != nil {
176+
_ = resp.Body.Close()
177+
}
127178
return nil, ErrNotFound
128179
}
129180

130-
return ioutil.ReadAll(resp.Body)
181+
return resp.Body, nil
131182
}
132183

133184
func makeManifestURL(baseURL, integration, stream, version string) (*url.URL, error) {

pkg/genlib/fields/version.go

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"context"
55
"encoding/json"
66
"errors"
7+
"io/ioutil"
78
"net/url"
89
"path"
910
"strings"
@@ -17,7 +18,7 @@ func MapVersion(ctx context.Context, baseUrl, integration, kibanaVersion string)
1718
return "", err
1819
}
1920

20-
body, err := getFromURL(ctx, searchUrl.String())
21+
r, err := getFromURL(ctx, searchUrl.String())
2122
if err != nil {
2223
return "", err
2324
}
@@ -26,6 +27,12 @@ func MapVersion(ctx context.Context, baseUrl, integration, kibanaVersion string)
2627
Version string `json:"version"`
2728
}
2829

30+
body, err := ioutil.ReadAll(r)
31+
if err != nil {
32+
_ = r.Close()
33+
return "", err
34+
}
35+
2936
if err = json.Unmarshal(body, &payload); err != nil {
3037
return "", err
3138
}

0 commit comments

Comments
 (0)