Skip to content

Commit

Permalink
Merge pull request #402 from nokia/proc-cmd
Browse files Browse the repository at this point in the history
Add the ability to apply processors offline to help with development and testing
  • Loading branch information
karimra authored Apr 24, 2024
2 parents adf9042 + 571e9f2 commit 2b7d788
Show file tree
Hide file tree
Showing 11 changed files with 769 additions and 194 deletions.
364 changes: 364 additions & 0 deletions docs/cmd/processor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,364 @@
### Description

The `[processor | proc]` command allows running a set of event processor offline given an input of event messages.

If expects a file input (`--input`) containing a list of event messages and one or more processor(s) name(s) (`--name`) defined in the main config file.
This command will read the input file, validate the configured processors, apply them on the input event messages and print out the result.

### Usage

`gnmic [global-flags] processor [local-flags]`

### Local Flags

The processor command supports the following local flags:

#### name

The `[--name]` flag sets the list of processors names to apply to the input.

#### input

The `[--input]` flag is used to specify the path to a file containing a list of event messages (`stdin` can be specified by giving the `-` value).

#### delimiter

The `[--delimiter]` flag is used to set the delimiter string between event messages in the input file, defaults to `\n`.

#### output

The `[--output]` flag references an output name configured in the main config file. The command will out format the resulting messages according to the output config. This is mainly for outputs with `type: prometheus`

### Example

Config File

```yaml
outputs:
out1:
type: prometheus
metric-prefix: "gnmic"
strings-as-labels: true

processors:
proc0:
event-strings:
value-names:
- "^_"
transforms:

# processor name
proc1:
# processor type
event-strings:
value-names:
- ".*"
transforms:
# strings function name
- path-base:
apply-on: "name"
proc2:
event-strings:
tag-names:
- "interface_name"
- "subscription-name"
- "source"
transforms:
# strings function name
- to-upper:
apply-on: "value"
- to-upper:
apply-on: "name"
proc3:
# processor type
event-drop:
condition: ".values | length == 0"
```
input File:
```json
[
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-packets": 351770
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-octets": 35284165
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-unicast-packets": 338985
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-broadcast-packets": 1218
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-multicast-packets": 5062
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-discarded-packets": 6377
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-error-packets": 128
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/in-fcs-error-packets": 0
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-packets": 568218
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-octets": 219527024
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-mirror-octets": 0
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-unicast-packets": 567532
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-broadcast-packets": 6
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-multicast-packets": 680
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-discarded-packets": 0
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-error-packets": 0
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/out-mirror-packets": 0
}
},
{
"name": "sub1",
"timestamp": 1710890476202665500,
"tags": {
"interface_name": "mgmt0",
"source": "clab-traps-srl1",
"subscription-name": "sub1"
},
"values": {
"/interface/statistics/carrier-transitions": 1
}
}
]
```

Command:

```shell
gnmic processor --input /path/to/event_msg.txt --delimiter "\n###" --name proc1,proc2,proc3 --output out1
```

Output:

```text
# HELP gnmic_in_packets gNMIc generated metric
# TYPE gnmic_in_packets untyped
gnmic_in_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 351770
# HELP gnmic_in_octets gNMIc generated metric
# TYPE gnmic_in_octets untyped
gnmic_in_octets{subscription_name="sub1",interface_name="mgmt0",source="clab-traps-srl1"} 3.5284165e+07
# HELP gnmic_in_unicast_packets gNMIc generated metric
# TYPE gnmic_in_unicast_packets untyped
gnmic_in_unicast_packets{subscription_name="sub1",interface_name="mgmt0",source="clab-traps-srl1"} 338985
# HELP gnmic_in_broadcast_packets gNMIc generated metric
# TYPE gnmic_in_broadcast_packets untyped
gnmic_in_broadcast_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 1218
# HELP gnmic_in_multicast_packets gNMIc generated metric
# TYPE gnmic_in_multicast_packets untyped
gnmic_in_multicast_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 5062
# HELP gnmic_in_discarded_packets gNMIc generated metric
# TYPE gnmic_in_discarded_packets untyped
gnmic_in_discarded_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 6377
# HELP gnmic_in_error_packets gNMIc generated metric
# TYPE gnmic_in_error_packets untyped
gnmic_in_error_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 128
# HELP gnmic_in_fcs_error_packets gNMIc generated metric
# TYPE gnmic_in_fcs_error_packets untyped
gnmic_in_fcs_error_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 0
# HELP gnmic_out_packets gNMIc generated metric
# TYPE gnmic_out_packets untyped
gnmic_out_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 568218
# HELP gnmic_out_octets gNMIc generated metric
# TYPE gnmic_out_octets untyped
gnmic_out_octets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 2.19527024e+08
# HELP gnmic_out_mirror_octets gNMIc generated metric
# TYPE gnmic_out_mirror_octets untyped
gnmic_out_mirror_octets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 0
# HELP gnmic_out_unicast_packets gNMIc generated metric
# TYPE gnmic_out_unicast_packets untyped
gnmic_out_unicast_packets{subscription_name="sub1",interface_name="mgmt0",source="clab-traps-srl1"} 567532
# HELP gnmic_out_broadcast_packets gNMIc generated metric
# TYPE gnmic_out_broadcast_packets untyped
gnmic_out_broadcast_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 6
# HELP gnmic_out_multicast_packets gNMIc generated metric
# TYPE gnmic_out_multicast_packets untyped
gnmic_out_multicast_packets{source="clab-traps-srl1",subscription_name="sub1",interface_name="mgmt0"} 680
# HELP gnmic_out_discarded_packets gNMIc generated metric
# TYPE gnmic_out_discarded_packets untyped
gnmic_out_discarded_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 0
# HELP gnmic_out_error_packets gNMIc generated metric
# TYPE gnmic_out_error_packets untyped
gnmic_out_error_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 0
# HELP gnmic_out_mirror_packets gNMIc generated metric
# TYPE gnmic_out_mirror_packets untyped
gnmic_out_mirror_packets{interface_name="mgmt0",source="clab-traps-srl1",subscription_name="sub1"} 0
# HELP gnmic_carrier_transitions gNMIc generated metric
# TYPE gnmic_carrier_transitions untyped
gnmic_carrier_transitions{subscription_name="sub1",interface_name="mgmt0",source="clab-traps-srl1"} 1
```
1 change: 0 additions & 1 deletion pkg/app/get.go
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,6 @@ func (a *App) getRequest(ctx context.Context, tc *types.TargetConfig, req *gnmi.

response, err := a.ClientGet(ctx, tc, xreq)
if err != nil {
a.logError(fmt.Errorf("target %q get request failed: %v", tc.Name, err))
return nil, err
}
return response, nil
Expand Down
Loading

0 comments on commit 2b7d788

Please sign in to comment.