7f2ec7240209ba95f5a1737b02c92efb1fe88383
[dcaegen2/analytics/tca.git] / dcae-analytics-cdap-plugins / piplelines / SimpleTCAPipeline.json
1 {
2   "artifact": {
3     "name": "cdap-data-streams",
4     "version": "4.0.0",
5     "scope": "SYSTEM",
6     "label": "Data Pipeline - Realtime"
7   },
8   "__ui__": {
9     "nodes": [
10       {
11         "plugin": {
12           "label": "DMaaPMRSink",
13           "artifact": {
14             "name": "dcae-analytics-cdap-plugins",
15             "version": "3.0-SNAPSHOT",
16             "scope": "USER"
17           },
18           "name": "DMaaPMRSink",
19           "properties": {
20             "referenceName": "DMaaPMRSink",
21             "hostName": "zldcmtc1njmsrt00.homer.com",
22             "portNumber": "3905",
23             "topicName": "com.dcae.dmaap.FTL.DcaeTestVESPub",
24             "protocol": "https",
25             "userName": "USER",
26             "userPassword": "PASSWORD",
27             "contentType": "application/json",
28             "messageColumnName": "alert",
29             "maxBatchSize": "50"
30           }
31         },
32         "icon": "fa-plug",
33         "description": "A batch sink Plugin that publishes messages to DMaaP MR Topic.",
34         "type": "batchsink",
35         "warning": true,
36         "_uiPosition": {
37           "top": "230.9921875px",
38           "left": "1212px"
39         },
40         "name": "DMaaPMRSink",
41         "errorCount": 0,
42         "_backendProperties": {
43           "portNumber": {
44             "name": "portNumber",
45             "description": "DMaaP Message Router Host Port number. Defaults to Port 80",
46             "type": "int",
47             "required": false,
48             "macroSupported": true
49           },
50           "protocol": {
51             "name": "protocol",
52             "description": "DMaaP Message Router HTTP Protocol e.g. HTTP or HTTPS. Defaults to HTTPS",
53             "type": "string",
54             "required": false,
55             "macroSupported": true
56           },
57           "userPassword": {
58             "name": "userPassword",
59             "description": "DMaaP Message Router User Password used for AAF Authentication. Defaults to no authentication",
60             "type": "string",
61             "required": false,
62             "macroSupported": true
63           },
64           "userName": {
65             "name": "userName",
66             "description": "DMaaP Message Router User Name used for AAF Authentication. Defaults to no authentication",
67             "type": "string",
68             "required": false,
69             "macroSupported": true
70           },
71           "hostName": {
72             "name": "hostName",
73             "description": "DMaaP Message Router HostName",
74             "type": "string",
75             "required": true,
76             "macroSupported": true
77           },
78           "messageColumnName": {
79             "name": "messageColumnName",
80             "description": "Column name of input schema which contains the message that needs to be written to DMaaP MR Topic",
81             "type": "string",
82             "required": true,
83             "macroSupported": true
84           },
85           "contentType": {
86             "name": "contentType",
87             "description": "DMaaP Message Router Content Type. Defaults to 'application/json'",
88             "type": "string",
89             "required": false,
90             "macroSupported": true
91           },
92           "maxRecoveryQueueSize": {
93             "name": "maxRecoveryQueueSize",
94             "description": "DMaaP MR Publisher Recovery Queue Size. Default to 1000K messages which can be buffered in memory in case DMaaP MR Publisher is temporarily unavailable",
95             "type": "int",
96             "required": false,
97             "macroSupported": true
98           },
99           "referenceName": {
100             "name": "referenceName",
101             "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.",
102             "type": "string",
103             "required": true,
104             "macroSupported": true
105           },
106           "topicName": {
107             "name": "topicName",
108             "description": "DMaaP Message Router Topic Name",
109             "type": "string",
110             "required": true,
111             "macroSupported": true
112           },
113           "maxBatchSize": {
114             "name": "maxBatchSize",
115             "description": "DMaaP MR Publisher Max Batch Size. Defaults to no Batch",
116             "type": "int",
117             "required": false,
118             "macroSupported": true
119           }
120         },
121         "implicitSchema": null,
122         "outputSchemaProperty": null,
123         "selected": false,
124         "inputSchema": [
125           {
126             "name": "JavaScript2",
127             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
128           }
129         ],
130         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tacMessageType\",\"type\":\"string\"}]}"
131       },
132       {
133         "plugin": {
134           "label": "DMaaPMRSource",
135           "artifact": {
136             "name": "dcae-analytics-cdap-plugins",
137             "version": "3.0-SNAPSHOT",
138             "scope": "USER"
139           },
140           "name": "DMaaPMRSource",
141           "properties": {
142             "referenceName": "DMaaPMRSource",
143             "hostName": "zldcmtc1njmsrt00.homer.com",
144             "portNumber": "3905",
145             "topicName": "com.dcae.dmaap.FTL.DcaeTestVESSub",
146             "pollingInterval": "20000",
147             "protocol": "https",
148             "userName": "USER",
149             "userPassword": "PASSWORD",
150             "contentType": "application/json",
151             "consumerId": "C1",
152             "consumerGroup": "OpenDCAE-G1"
153           }
154         },
155         "icon": "fa-plug",
156         "description": "Fetches DMaaP MR Messages at regular intervals",
157         "type": "streamingsource",
158         "warning": true,
159         "_uiPosition": {
160           "top": "230.9921875px",
161           "left": "318px"
162         },
163         "name": "DMaaPMRSource",
164         "errorCount": 0,
165         "_backendProperties": {
166           "portNumber": {
167             "name": "portNumber",
168             "description": "DMaaP Message Router Host Port number. Defaults to Port 80",
169             "type": "int",
170             "required": false,
171             "macroSupported": true
172           },
173           "protocol": {
174             "name": "protocol",
175             "description": "DMaaP Message Router HTTP Protocol e.g. HTTP or HTTPS. Defaults to HTTPS",
176             "type": "string",
177             "required": false,
178             "macroSupported": true
179           },
180           "timeoutMS": {
181             "name": "timeoutMS",
182             "description": "DMaaP Message Router Subscriber Timeout in MS. Defaults to no timeout",
183             "type": "int",
184             "required": false,
185             "macroSupported": true
186           },
187           "consumerGroup": {
188             "name": "consumerGroup",
189             "description": "DMaaP Message Router Subscriber Consumer Group. Defaults to some randomly created user Group",
190             "type": "string",
191             "required": false,
192             "macroSupported": true
193           },
194           "userPassword": {
195             "name": "userPassword",
196             "description": "DMaaP Message Router User Password used for AAF Authentication. Defaults to no authentication",
197             "type": "string",
198             "required": false,
199             "macroSupported": true
200           },
201           "userName": {
202             "name": "userName",
203             "description": "DMaaP Message Router User Name used for AAF Authentication. Defaults to no authentication",
204             "type": "string",
205             "required": false,
206             "macroSupported": true
207           },
208           "hostName": {
209             "name": "hostName",
210             "description": "DMaaP Message Router HostName",
211             "type": "string",
212             "required": true,
213             "macroSupported": true
214           },
215           "pollingInterval": {
216             "name": "pollingInterval",
217             "description": "DMaaP MR Polling Interval in MS",
218             "type": "int",
219             "required": true,
220             "macroSupported": true
221           },
222           "contentType": {
223             "name": "contentType",
224             "description": "DMaaP Message Router Content Type. Defaults to 'application/json'",
225             "type": "string",
226             "required": false,
227             "macroSupported": true
228           },
229           "referenceName": {
230             "name": "referenceName",
231             "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.",
232             "type": "string",
233             "required": true,
234             "macroSupported": true
235           },
236           "topicName": {
237             "name": "topicName",
238             "description": "DMaaP Message Router Topic Name",
239             "type": "string",
240             "required": true,
241             "macroSupported": true
242           },
243           "messageLimit": {
244             "name": "messageLimit",
245             "description": "DMaaP Message Router Subscriber Message Limit. Defaults to no message limit",
246             "type": "int",
247             "required": false,
248             "macroSupported": true
249           },
250           "consumerId": {
251             "name": "consumerId",
252             "description": "DMaaP Message Router Subscriber Consumer ID. Defaults to some randomly created userID",
253             "type": "string",
254             "required": false,
255             "macroSupported": true
256           }
257         },
258         "implicitSchema": {
259           "ts": "long",
260           "responseCode": "int",
261           "responseMessage": "string",
262           "message": "string"
263         },
264         "outputSchemaProperty": null,
265         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
266         "selected": false
267       },
268       {
269         "plugin": {
270           "label": "JsonPathFilter",
271           "artifact": {
272             "name": "dcae-analytics-cdap-plugins",
273             "version": "3.0-SNAPSHOT",
274             "scope": "USER"
275           },
276           "name": "JsonPathFilter",
277           "properties": {
278             "referenceName": "JsonPathFilter",
279             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
280             "jsonFilterMappings": "$.event.commonEventHeader.domain:measurementsForVfScaling,$.event.commonEventHeader.functionalRole:vLoadBalancer;vFirewall",
281             "incomingJsonFieldName": "message",
282             "outputSchemaFieldName": "filterMatched"
283           }
284         },
285         "icon": "fa-plug",
286         "description": "Filters incoming schema field based of given json path expected values",
287         "type": "transform",
288         "warning": true,
289         "_uiPosition": {
290           "top": "230.9921875px",
291           "left": "474px"
292         },
293         "name": "JsonPathFilter",
294         "errorCount": 0,
295         "_backendProperties": {
296           "schema": {
297             "name": "schema",
298             "description": "Output Schema",
299             "type": "string",
300             "required": true,
301             "macroSupported": false
302           },
303           "incomingJsonFieldName": {
304             "name": "incomingJsonFieldName",
305             "description": "Input schema field name that contain JSON used for filtering",
306             "type": "string",
307             "required": true,
308             "macroSupported": false
309           },
310           "outputSchemaFieldName": {
311             "name": "outputSchemaFieldName",
312             "description": "Name of the nullable boolean schema field name that will contain result of the filter matching",
313             "type": "string",
314             "required": true,
315             "macroSupported": false
316           },
317           "jsonFilterMappings": {
318             "name": "jsonFilterMappings",
319             "description": "Filters incoming JSON based on given filter mappings - in terms of JSON path and expected values.Right hand side contains JSON path. Left hand side contains semicolon (';') separated expected values for that JSON Path. If all provided JSON Path mappings and corresponding values matches - output schema field will be marked as true",
320             "type": "string",
321             "required": true,
322             "macroSupported": false
323           },
324           "referenceName": {
325             "name": "referenceName",
326             "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.",
327             "type": "string",
328             "required": true,
329             "macroSupported": true
330           }
331         },
332         "implicitSchema": null,
333         "outputSchemaProperty": "schema",
334         "watchProperty": "format",
335         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
336         "selected": false,
337         "inputSchema": [
338           {
339             "name": "DMaaPMRSource",
340             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
341           }
342         ]
343       },
344       {
345         "plugin": {
346           "label": "JavaScriptJsonPathFilter",
347           "artifact": {
348             "name": "core-plugins",
349             "version": "1.5.0",
350             "scope": "SYSTEM"
351           },
352           "name": "JavaScript",
353           "properties": {
354             "script": "function transform(input, emitter, context) {\n  \n  var filterMatched = input.filterMatched;\n  var log = context.getLogger();\n  var metrics = context.getMetrics();\n  \n  log.debug('Received filterMatched: ' + filterMatched);\n  \n  // if matched filter push message for TCA\n  if(filterMatched) {\n    \n    log.debug('Json Filter matched - pushing to TCA');\n    metrics.count('js.tca.pushed', 1);\n    emitter.emit(input);\n    \n   \n   // if matched unsuccessfull - no need to do TCA\n  } else {\n    \n    log.debug('Json Filter unmatched - dropping message');\n    metrics.count('js.tca.dropped', 1); \n\n  }\n  \n  \n}",
355             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
356           }
357         },
358         "icon": "icon-javascript",
359         "description": "Executes user-provided JavaScript that transforms one record into zero or more records.",
360         "type": "transform",
361         "warning": true,
362         "_uiPosition": {
363           "top": "230.9921875px",
364           "left": "642px"
365         },
366         "name": "JavaScriptJsonPathFilter",
367         "errorCount": 0,
368         "_backendProperties": {
369           "schema": {
370             "name": "schema",
371             "description": "The schema of output objects. If no schema is given, it is assumed that the output schema is the same as the input schema.",
372             "type": "string",
373             "required": false,
374             "macroSupported": false
375           },
376           "script": {
377             "name": "script",
378             "description": "JavaScript defining how to transform input record into zero or more records. The script must implement a function called 'transform', which takes as input a JSON object (representing the input record) emitter object, which can be used to emit records and error messagesand a context object (which contains CDAP metrics, logger and lookup)For example:\n'function transform(input, emitter, context) {\n  if(context.getLookup('blacklist').lookup(input.id) != null) {\n     emitter.emitError({\"errorCode\":31, \"errorMsg\":\"blacklisted id\", \"invalidRecord\": input}); \n  } else {\n     if(input.count < 0) {\n       context.getMetrics().count(\"negative.count\", 1);\n       context.getLogger().debug(\"Received record with negative count\");\n     }\n  input.count = input.count * 1024;\n  emitter.emit(input);   } \n}'\nwill emit an error if the input id is present in blacklist table, else scale the 'count' field by 1024",
379             "type": "string",
380             "required": true,
381             "macroSupported": false
382           },
383           "lookup": {
384             "name": "lookup",
385             "description": "Lookup tables to use during transform. Currently supports KeyValueTable.",
386             "type": "string",
387             "required": false,
388             "macroSupported": false
389           }
390         },
391         "implicitSchema": null,
392         "outputSchemaProperty": "schema",
393         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
394         "selected": false,
395         "inputSchema": [
396           {
397             "name": "JsonPathFilter",
398             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
399           }
400         ],
401         "errorDatasetName": ""
402       },
403       {
404         "plugin": {
405           "label": "SimpleTCAPlugin",
406           "artifact": {
407             "name": "dcae-analytics-cdap-plugins",
408             "version": "3.0-SNAPSHOT",
409             "scope": "USER"
410           },
411           "name": "SimpleTCAPlugin",
412           "properties": {
413             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
414             "policyJson": "{\"domain\":\"measurementsForVfScaling\",\"metricsPerFunctionalRole\":[{\"functionalRole\":\"vFirewall\",\"policyScope\":\"resource=vFirewall;type=configuration\",\"policyName\":\"configuration.dcae.microservice.tca.xml\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn\",\"thresholdValue\":4000,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\"},{\"closedLoopControlName\":\"CL-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn\",\"thresholdValue\":20000,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\"}]},{\"functionalRole\":\"vLoadBalancer\",\"policyScope\":\"resource=vLoadBalancer;type=configuration\",\"policyName\":\"configuration.dcae.microservice.tca.xml\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":500,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\"},{\"closedLoopControlName\":\"CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":5000,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\"}]}]}",
415             "vesMessageFieldName": "message",
416             "alertFieldName": "alert",
417             "messageTypeFieldName": "tcaMessageType",
418             "referenceName": "SimpleTCAPlugin",
419             "enableAlertCEFFormat": "false"
420           }
421         },
422         "icon": "fa-plug",
423         "description": "Used to create TCA (Threshold Crossing Alert) based on given Policy",
424         "type": "sparkcompute",
425         "warning": true,
426         "_uiPosition": {
427           "top": "230.9921875px",
428           "left": "824px"
429         },
430         "name": "SimpleTCAPlugin",
431         "errorCount": 0,
432         "_backendProperties": {
433           "schema": {
434             "name": "schema",
435             "description": "Specifies the output schema",
436             "type": "string",
437             "required": true,
438             "macroSupported": false
439           },
440           "policyJson": {
441             "name": "policyJson",
442             "description": "Policy JSON that need to be applied to VES Message",
443             "type": "string",
444             "required": true,
445             "macroSupported": true
446           },
447           "vesMessageFieldName": {
448             "name": "vesMessageFieldName",
449             "description": "Field name containing VES Message",
450             "type": "string",
451             "required": true,
452             "macroSupported": true
453           },
454           "referenceName": {
455             "name": "referenceName",
456             "description": "This will be used to uniquely identify this source/sink for lineage, annotating metadata, etc.",
457             "type": "string",
458             "required": true,
459             "macroSupported": true
460           },
461           "messageTypeFieldName": {
462             "name": "messageTypeFieldName",
463             "description": "Name of the output field that will contain message type: INAPPLICABLE, COMPLIANT, NON_COMPLIANT",
464             "type": "string",
465             "required": true,
466             "macroSupported": true
467           },
468           "alertFieldName": {
469             "name": "alertFieldName",
470             "description": "Name of the output field that will contain the alert",
471             "type": "string",
472             "required": true,
473             "macroSupported": true
474           },
475           "enableAlertCEFFormat": {
476             "name": "enableAlertCEFFormat",
477             "description": "Enable Alert Output Format in CEF format",
478             "type": "string",
479             "required": false,
480             "macroSupported": true
481           }
482         },
483         "implicitSchema": null,
484         "outputSchemaProperty": "schema",
485         "watchProperty": "format",
486         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
487         "selected": false,
488         "inputSchema": [
489           {
490             "name": "JavaScriptJsonPathFilter",
491             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
492           }
493         ]
494       },
495       {
496         "plugin": {
497           "label": "TCAMessageStatusTable",
498           "artifact": {
499             "name": "core-plugins",
500             "version": "1.5.0",
501             "scope": "SYSTEM"
502           },
503           "name": "Table",
504           "properties": {
505             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
506             "name": "TCAMessageStatusTable",
507             "schema.row.field": "ts"
508           }
509         },
510         "icon": "icon-table",
511         "description": "Writes records to a Table with one record field mapping to the Table rowkey, and all other record fields mapping to Table columns.",
512         "type": "batchsink",
513         "warning": true,
514         "_uiPosition": {
515           "top": "416.9921875px",
516           "left": "956px"
517         },
518         "name": "TCAMessageStatusTable",
519         "errorCount": 0,
520         "_backendProperties": {
521           "schema": {
522             "name": "schema",
523             "description": "schema of the table as a JSON Object. If the table does not already exist, one will be created with this schema, which will allow the table to be explored through Hive. If no schema is given, the table created will not be explorable.",
524             "type": "string",
525             "required": false,
526             "macroSupported": false
527           },
528           "name": {
529             "name": "name",
530             "description": "Name of the dataset. If the dataset does not already exist, one will be created.",
531             "type": "string",
532             "required": true,
533             "macroSupported": true
534           },
535           "schema.row.field": {
536             "name": "schema.row.field",
537             "description": "The name of the record field that should be used as the row key when writing to the table.",
538             "type": "string",
539             "required": true,
540             "macroSupported": false
541           }
542         },
543         "implicitSchema": null,
544         "outputSchemaProperty": "schema",
545         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
546         "selected": false,
547         "inputSchema": [
548           {
549             "name": "SimpleTCAPlugin",
550             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
551           }
552         ]
553       },
554       {
555         "plugin": {
556           "label": "JavaScript2",
557           "artifact": {
558             "name": "core-plugins",
559             "version": "1.5.0",
560             "scope": "SYSTEM"
561           },
562           "name": "JavaScript",
563           "properties": {
564             "script": "function transform(input, emitter, context) {\n  \n  var alert = input.alert;\n  var log = context.getLogger();\n  var metrics = context.getMetrics();\n  \n  log.debug('Received alert: ' + alert)\n  \n  \n  // if alert is null then drop the message\n  if(alert == null) {\n    \n    log.debug('No Alert Found - Dropping incoming record');\n    metrics.count('js.alerts.dropped', 1);\n  \n    \n  // if alert is not null push message to next plugin\n  } else {\n    \n    log.debug('Found Alert - Pushing record to next Plugin');\n    metrics.count('js.alerts.pushed', 1);\n  \n    emitter.emit(input);\n\n  }\n  \n}",
565             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
566           }
567         },
568         "icon": "icon-javascript",
569         "description": "Executes user-provided JavaScript that transforms one record into zero or more records.",
570         "type": "transform",
571         "warning": true,
572         "_uiPosition": {
573           "top": "230.9921875px",
574           "left": "1030px"
575         },
576         "name": "JavaScript2",
577         "errorCount": 0,
578         "_backendProperties": {
579           "schema": {
580             "name": "schema",
581             "description": "The schema of output objects. If no schema is given, it is assumed that the output schema is the same as the input schema.",
582             "type": "string",
583             "required": false,
584             "macroSupported": false
585           },
586           "script": {
587             "name": "script",
588             "description": "JavaScript defining how to transform input record into zero or more records. The script must implement a function called 'transform', which takes as input a JSON object (representing the input record) emitter object, which can be used to emit records and error messagesand a context object (which contains CDAP metrics, logger and lookup)For example:\n'function transform(input, emitter, context) {\n  if(context.getLookup('blacklist').lookup(input.id) != null) {\n     emitter.emitError({\"errorCode\":31, \"errorMsg\":\"blacklisted id\", \"invalidRecord\": input}); \n  } else {\n     if(input.count < 0) {\n       context.getMetrics().count(\"negative.count\", 1);\n       context.getLogger().debug(\"Received record with negative count\");\n     }\n  input.count = input.count * 1024;\n  emitter.emit(input);   } \n}'\nwill emit an error if the input id is present in blacklist table, else scale the 'count' field by 1024",
589             "type": "string",
590             "required": true,
591             "macroSupported": false
592           },
593           "lookup": {
594             "name": "lookup",
595             "description": "Lookup tables to use during transform. Currently supports KeyValueTable.",
596             "type": "string",
597             "required": false,
598             "macroSupported": false
599           }
600         },
601         "implicitSchema": null,
602         "outputSchemaProperty": "schema",
603         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
604         "selected": false,
605         "inputSchema": [
606           {
607             "name": "SimpleTCAPlugin",
608             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
609           }
610         ],
611         "errorDatasetName": ""
612       }
613     ],
614     "draftId": "26c03fab-253e-42f3-94e8-575dc1501036"
615   },
616   "description": "",
617   "name": "SimpleTCAPluginFullPipeLine",
618   "config": {
619     "resources": {
620       "memoryMB": 1024,
621       "virtualCores": 1
622     },
623     "driverResources": {
624       "memoryMB": 1024,
625       "virtualCores": 1
626     },
627     "connections": [
628       {
629         "from": "DMaaPMRSource",
630         "to": "JsonPathFilter"
631       },
632       {
633         "from": "JsonPathFilter",
634         "to": "JavaScriptJsonPathFilter"
635       },
636       {
637         "from": "JavaScriptJsonPathFilter",
638         "to": "SimpleTCAPlugin"
639       },
640       {
641         "from": "SimpleTCAPlugin",
642         "to": "TCAMessageStatusTable"
643       },
644       {
645         "from": "SimpleTCAPlugin",
646         "to": "JavaScript2"
647       },
648       {
649         "from": "JavaScript2",
650         "to": "DMaaPMRSink"
651       }
652     ],
653     "comments": [],
654     "postActions": [],
655     "stages": [
656       {
657         "name": "DMaaPMRSource",
658         "plugin": {
659           "name": "DMaaPMRSource",
660           "type": "streamingsource",
661           "label": "DMaaPMRSource",
662           "artifact": {
663             "name": "dcae-analytics-cdap-plugins",
664             "version": "3.0-SNAPSHOT",
665             "scope": "USER"
666           },
667           "properties": {
668             "referenceName": "DMaaPMRSource",
669             "hostName": "zldcmtc1njmsrt00.homer.com",
670             "portNumber": "3905",
671             "topicName": "com.dcae.dmaap.FTL.DcaeTestVESSub",
672             "pollingInterval": "20000",
673             "protocol": "https",
674             "userName": "USER",
675             "userPassword": "PASSWORD",
676             "contentType": "application/json",
677             "consumerId": "C1",
678             "consumerGroup": "OpenDCAE-G1"
679           }
680         },
681         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
682       },
683       {
684         "name": "JsonPathFilter",
685         "plugin": {
686           "name": "JsonPathFilter",
687           "type": "transform",
688           "label": "JsonPathFilter",
689           "artifact": {
690             "name": "dcae-analytics-cdap-plugins",
691             "version": "3.0-SNAPSHOT",
692             "scope": "USER"
693           },
694           "properties": {
695             "referenceName": "JsonPathFilter",
696             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
697             "jsonFilterMappings": "$.event.commonEventHeader.domain:measurementsForVfScaling,$.event.commonEventHeader.functionalRole:vLoadBalancer;vFirewall",
698             "incomingJsonFieldName": "message",
699             "outputSchemaFieldName": "filterMatched"
700           }
701         },
702         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
703         "inputSchema": [
704           {
705             "name": "DMaaPMRSource",
706             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
707           }
708         ]
709       },
710       {
711         "name": "JavaScriptJsonPathFilter",
712         "plugin": {
713           "name": "JavaScript",
714           "type": "transform",
715           "label": "JavaScriptJsonPathFilter",
716           "artifact": {
717             "name": "core-plugins",
718             "version": "1.5.0",
719             "scope": "SYSTEM"
720           },
721           "properties": {
722             "script": "function transform(input, emitter, context) {\n  \n  var filterMatched = input.filterMatched;\n  var log = context.getLogger();\n  var metrics = context.getMetrics();\n  \n  log.debug('Received filterMatched: ' + filterMatched);\n  \n  // if matched filter push message for TCA\n  if(filterMatched) {\n    \n    log.debug('Json Filter matched - pushing to TCA');\n    metrics.count('js.tca.pushed', 1);\n    emitter.emit(input);\n    \n   \n   // if matched unsuccessfull - no need to do TCA\n  } else {\n    \n    log.debug('Json Filter unmatched - dropping message');\n    metrics.count('js.tca.dropped', 1); \n\n  }\n  \n  \n}",
723             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
724           }
725         },
726         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}",
727         "inputSchema": [
728           {
729             "name": "JsonPathFilter",
730             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
731           }
732         ]
733       },
734       {
735         "name": "SimpleTCAPlugin",
736         "plugin": {
737           "name": "SimpleTCAPlugin",
738           "type": "sparkcompute",
739           "label": "SimpleTCAPlugin",
740           "artifact": {
741             "name": "dcae-analytics-cdap-plugins",
742             "version": "3.0-SNAPSHOT",
743             "scope": "USER"
744           },
745           "properties": {
746             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
747             "policyJson": "{\"domain\":\"measurementsForVfScaling\",\"metricsPerFunctionalRole\":[{\"functionalRole\":\"vFirewall\",\"policyScope\":\"resource=vFirewall;type=configuration\",\"policyName\":\"configuration.dcae.microservice.tca.xml\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"CL-FRWL-LOW-TRAFFIC-SIG-d925ed73-8231-4d02-9545-db4e101f88f8\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn\",\"thresholdValue\":4000,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\"},{\"closedLoopControlName\":\"CL-FRWL-HIGH-TRAFFIC-SIG-EA36FE84-9342-5E13-A656-EC5F21309A09\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].bytesIn\",\"thresholdValue\":20000,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\"}]},{\"functionalRole\":\"vLoadBalancer\",\"policyScope\":\"resource=vLoadBalancer;type=configuration\",\"policyName\":\"configuration.dcae.microservice.tca.xml\",\"policyVersion\":\"v0.0.1\",\"thresholds\":[{\"closedLoopControlName\":\"CL-LBAL-LOW-TRAFFIC-SIG-FB480F95-A453-6F24-B767-FD703241AB1A\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":500,\"direction\":\"LESS_OR_EQUAL\",\"severity\":\"MAJOR\"},{\"closedLoopControlName\":\"CL-LBAL-LOW-TRAFFIC-SIG-0C5920A6-B564-8035-C878-0E814352BC2B\",\"version\":\"1.0.2\",\"fieldPath\":\"$.event.measurementsForVfScalingFields.vNicUsageArray[*].packetsIn\",\"thresholdValue\":5000,\"direction\":\"GREATER_OR_EQUAL\",\"severity\":\"CRITICAL\"}]}]}",
748             "vesMessageFieldName": "message",
749             "alertFieldName": "alert",
750             "messageTypeFieldName": "tcaMessageType",
751             "referenceName": "SimpleTCAPlugin",
752             "enableAlertCEFFormat": "false"
753           }
754         },
755         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
756         "inputSchema": [
757           {
758             "name": "JavaScriptJsonPathFilter",
759             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"}]}"
760           }
761         ]
762       },
763       {
764         "name": "TCAMessageStatusTable",
765         "plugin": {
766           "name": "Table",
767           "type": "batchsink",
768           "label": "TCAMessageStatusTable",
769           "artifact": {
770             "name": "core-plugins",
771             "version": "1.5.0",
772             "scope": "SYSTEM"
773           },
774           "properties": {
775             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
776             "name": "TCAMessageStatusTable",
777             "schema.row.field": "ts"
778           }
779         },
780         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
781         "inputSchema": [
782           {
783             "name": "SimpleTCAPlugin",
784             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
785           }
786         ]
787       },
788       {
789         "name": "JavaScript2",
790         "plugin": {
791           "name": "JavaScript",
792           "type": "transform",
793           "label": "JavaScript2",
794           "artifact": {
795             "name": "core-plugins",
796             "version": "1.5.0",
797             "scope": "SYSTEM"
798           },
799           "properties": {
800             "script": "function transform(input, emitter, context) {\n  \n  var alert = input.alert;\n  var log = context.getLogger();\n  var metrics = context.getMetrics();\n  \n  log.debug('Received alert: ' + alert)\n  \n  \n  // if alert is null then drop the message\n  if(alert == null) {\n    \n    log.debug('No Alert Found - Dropping incoming record');\n    metrics.count('js.alerts.dropped', 1);\n  \n    \n  // if alert is not null push message to next plugin\n  } else {\n    \n    log.debug('Found Alert - Pushing record to next Plugin');\n    metrics.count('js.alerts.pushed', 1);\n  \n    emitter.emit(input);\n\n  }\n  \n}",
801             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
802           }
803         },
804         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}",
805         "inputSchema": [
806           {
807             "name": "SimpleTCAPlugin",
808             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":[\"string\",\"null\"]},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
809           }
810         ]
811       },
812       {
813         "name": "DMaaPMRSink",
814         "plugin": {
815           "name": "DMaaPMRSink",
816           "type": "batchsink",
817           "label": "DMaaPMRSink",
818           "artifact": {
819             "name": "dcae-analytics-cdap-plugins",
820             "version": "3.0-SNAPSHOT",
821             "scope": "USER"
822           },
823           "properties": {
824             "referenceName": "DMaaPMRSink",
825             "hostName": "zldcmtc1njmsrt00.homer.com",
826             "portNumber": "3905",
827             "topicName": "com.dcae.dmaap.FTL.DcaeTestVESPub",
828             "protocol": "https",
829             "userName": "USER",
830             "userPassword": "PASSWORD",
831             "contentType": "application/json",
832             "messageColumnName": "alert",
833             "maxBatchSize": "50"
834           }
835         },
836         "outputSchema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tacMessageType\",\"type\":\"string\"}]}",
837         "inputSchema": [
838           {
839             "name": "JavaScript2",
840             "schema": "{\"type\":\"record\",\"name\":\"etlSchemaBody\",\"fields\":[{\"name\":\"ts\",\"type\":\"long\"},{\"name\":\"filterMatched\",\"type\":[\"boolean\",\"null\"]},{\"name\":\"responseCode\",\"type\":\"int\"},{\"name\":\"responseMessage\",\"type\":\"string\"},{\"name\":\"message\",\"type\":\"string\"},{\"name\":\"alert\",\"type\":\"string\"},{\"name\":\"tcaMessageType\",\"type\":\"string\"}]}"
841           }
842         ]
843       }
844     ],
845     "batchInterval": "60s"
846   }
847 }