Skip to content

Commit 30d66e4

Browse files
authored
Handle input packages (#15)
Handle input packages by adding an `Input` field to the `Integration` struct that contains the metadata (e.g. fields, pipelines, samples events) from an input type package Closes #5
1 parent b4f1cf5 commit 30d66e4

File tree

3 files changed

+171
-9
lines changed

3 files changed

+171
-9
lines changed

fleetpkg.go

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
type Integration struct {
3131
Build *BuildManifest `json:"build,omitempty" yaml:"build,omitempty"`
3232
Manifest Manifest `json:"manifest,omitempty" yaml:"manifest,omitempty"`
33+
Input *DataStream `json:"input,omitempty" yaml:"input,omitempty"`
3334
DataStreams map[string]*DataStream `json:"data_streams,omitempty" yaml:"data_streams,omitempty"`
3435
Changelog Changelog `json:"changelog,omitempty" yaml:"changelog,omitempty"`
3536

@@ -436,7 +437,6 @@ func Read(path string) (*Integration, error) {
436437
}
437438
integration.Manifest.sourceFile = sourceFile
438439
annotateFileMetadata(integration.Manifest.sourceFile, &integration.Manifest)
439-
440440
sourceFile = filepath.Join(path, "changelog.yml")
441441
if err := readYAML(sourceFile, &integration.Changelog, true); err != nil {
442442
return nil, err
@@ -455,21 +455,31 @@ func Read(path string) (*Integration, error) {
455455
integration.Build.sourceFile = sourceFile
456456
}
457457

458-
dataStreams, err := filepath.Glob(filepath.Join(path, "data_stream/*/manifest.yml"))
459-
if err != nil {
460-
return nil, err
458+
var dataStreams []string
459+
if integration.Manifest.Type == "input" {
460+
dataStreams = []string{filepath.Join(path, "manifest.yml")}
461+
} else {
462+
var err error
463+
dataStreams, err = filepath.Glob(filepath.Join(path, "data_stream/*/manifest.yml"))
464+
if err != nil {
465+
return nil, err
466+
}
461467
}
462468
for _, manifestPath := range dataStreams {
463469
ds := &DataStream{
464470
sourceDir: filepath.Dir(manifestPath),
465471
}
466-
integration.DataStreams[filepath.Base(ds.sourceDir)] = ds
472+
if integration.Manifest.Type == "input" {
473+
integration.Input = ds
474+
} else {
475+
integration.DataStreams[filepath.Base(ds.sourceDir)] = ds
467476

468-
if err := readYAML(manifestPath, &ds.Manifest, true); err != nil {
469-
return nil, err
477+
if err := readYAML(manifestPath, &ds.Manifest, true); err != nil {
478+
return nil, err
479+
}
480+
ds.Manifest.sourceFile = manifestPath
481+
annotateFileMetadata(ds.Manifest.sourceFile, &ds.Manifest)
470482
}
471-
ds.Manifest.sourceFile = manifestPath
472-
annotateFileMetadata(ds.Manifest.sourceFile, &ds.Manifest)
473483

474484
pipelines, err := filepath.Glob(filepath.Join(ds.sourceDir, "elasticsearch/ingest_pipeline/*.yml"))
475485
if err != nil {

testdata/cel.golden.json

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -362,6 +362,100 @@
362362
"github": "elastic/security-external-integrations"
363363
}
364364
},
365+
"input": {
366+
"manifest": {},
367+
"sample_event": {
368+
"event": {
369+
"@timestamp": "2023-03-23T00:04:52.561Z",
370+
"agent": {
371+
"ephemeral_id": "0b7c0c2b-32aa-4b65-95a4-d34416b8a7eb",
372+
"id": "8c8782fa-cd5b-4ae8-94a0-ee8e3ea9a8df",
373+
"name": "docker-fleet-agent",
374+
"type": "filebeat",
375+
"version": "8.6.1"
376+
},
377+
"data_stream": {
378+
"dataset": "cel.cel",
379+
"namespace": "ep",
380+
"type": "logs"
381+
},
382+
"ecs": {
383+
"version": "8.0.0"
384+
},
385+
"elastic_agent": {
386+
"id": "8c8782fa-cd5b-4ae8-94a0-ee8e3ea9a8df",
387+
"snapshot": false,
388+
"version": "8.6.1"
389+
},
390+
"event": {
391+
"dataset": "cel.cel"
392+
},
393+
"input": {
394+
"type": "cel"
395+
},
396+
"message": "success",
397+
"tags": [
398+
"forwarded"
399+
]
400+
}
401+
},
402+
"fields": {
403+
"input.yml": {
404+
"fields": [
405+
{
406+
"name": "@timestamp",
407+
"external": "ecs"
408+
},
409+
{
410+
"name": "ecs.version",
411+
"external": "ecs"
412+
},
413+
{
414+
"name": "message",
415+
"external": "ecs"
416+
},
417+
{
418+
"name": "input.name",
419+
"type": "constant_keyword"
420+
},
421+
{
422+
"name": "input.type",
423+
"type": "keyword"
424+
},
425+
{
426+
"name": "data_stream.type",
427+
"type": "constant_keyword",
428+
"external": "ecs"
429+
},
430+
{
431+
"name": "data_stream.dataset",
432+
"type": "constant_keyword",
433+
"external": "ecs"
434+
},
435+
{
436+
"name": "data_stream.namespace",
437+
"type": "constant_keyword",
438+
"external": "ecs"
439+
},
440+
{
441+
"name": "event.module",
442+
"type": "constant_keyword",
443+
"value": "cel",
444+
"external": "ecs"
445+
},
446+
{
447+
"name": "event.dataset",
448+
"type": "constant_keyword",
449+
"external": "ecs"
450+
},
451+
{
452+
"name": "tags",
453+
"external": "ecs"
454+
}
455+
]
456+
}
457+
}
458+
},
365459
"changelog": {
366460
"releases": [
367461
{

testdata/cel.golden.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -297,6 +297,64 @@ manifest:
297297
show_user: false
298298
owner:
299299
github: elastic/security-external-integrations
300+
input:
301+
sample_event:
302+
event:
303+
'@timestamp': "2023-03-23T00:04:52.561Z"
304+
agent:
305+
ephemeral_id: 0b7c0c2b-32aa-4b65-95a4-d34416b8a7eb
306+
id: 8c8782fa-cd5b-4ae8-94a0-ee8e3ea9a8df
307+
name: docker-fleet-agent
308+
type: filebeat
309+
version: 8.6.1
310+
data_stream:
311+
dataset: cel.cel
312+
namespace: ep
313+
type: logs
314+
ecs:
315+
version: 8.0.0
316+
elastic_agent:
317+
id: 8c8782fa-cd5b-4ae8-94a0-ee8e3ea9a8df
318+
snapshot: false
319+
version: 8.6.1
320+
event:
321+
dataset: cel.cel
322+
input:
323+
type: cel
324+
message: success
325+
tags:
326+
- forwarded
327+
fields:
328+
input.yml:
329+
fields:
330+
- name: '@timestamp'
331+
external: ecs
332+
- name: ecs.version
333+
external: ecs
334+
- name: message
335+
external: ecs
336+
- name: input.name
337+
type: constant_keyword
338+
- name: input.type
339+
type: keyword
340+
- name: data_stream.type
341+
type: constant_keyword
342+
external: ecs
343+
- name: data_stream.dataset
344+
type: constant_keyword
345+
external: ecs
346+
- name: data_stream.namespace
347+
type: constant_keyword
348+
external: ecs
349+
- name: event.module
350+
type: constant_keyword
351+
value: cel
352+
external: ecs
353+
- name: event.dataset
354+
type: constant_keyword
355+
external: ecs
356+
- name: tags
357+
external: ecs
300358
changelog:
301359
releases:
302360
- version: 0.3.0

0 commit comments

Comments
 (0)