-
Notifications
You must be signed in to change notification settings - Fork 0
/
3097d48f.a071f774.js
1 lines (1 loc) · 10.9 KB
/
3097d48f.a071f774.js
1
(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{100:function(e,t,n){"use strict";n.r(t),n.d(t,"frontMatter",(function(){return l})),n.d(t,"metadata",(function(){return i})),n.d(t,"rightToc",(function(){return c})),n.d(t,"default",(function(){return p}));var a=n(3),r=n(7),o=(n(0),n(192)),l={id:"data-collector",title:"Data Collector"},i={unversionedId:"data-collector",id:"data-collector",isDocsHomePage:!1,title:"Data Collector",description:"Data collector is a very powerful feature that allows you to collect",source:"@site/docs\\data-collector.md",slug:"/data-collector",permalink:"/docs/data-collector",version:"current",sidebar:"docs",previous:{title:"Variables and indexed access",permalink:"/docs/variables-and-indexed-access"},next:{title:"Calling method on variable",permalink:"/docs/Calling-method-on-variable"}},c=[],s={rightToc:c};function p(e){var t=e.components,n=Object(r.a)(e,["components"]);return Object(o.b)("wrapper",Object(a.a)({},s,n,{components:t,mdxType:"MDXLayout"}),Object(o.b)("p",null,"Data collector is a very powerful feature that allows you to collect\ndata from complex and nested structured data. This feature reduces the\nnumber of actions that you have to write in order to access and save\nnested data to only a single action, whereas, this would otherwise\ntake around 10-20 actions in general."),Object(o.b)("p",null,"Let's go through a simple example to understand how this works. We're\nassuming that the following data is saved in the variable ",Object(o.b)("inlineCode",{parentName:"p"},"%|data|%"),":"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-json"}),'[\n {\n "error1": {\n "type": "Runtime Error",\n "occurrence": [\n {"line": 10, "message": "fail"},\n {"line": 20, "message": "block"},\n ],\n },\n "error2": {\n "type": "Compiler Error",\n "occurrence": [\n {"line": 50, "message": "fail"},\n {"line": 64, "message": "xyz"},\n {"line": 70, "message": "pqr"},\n ],\n },\n "1error": {\n "type": "Runtime Error",\n "occurrence": [\n {"line": 100, "message": "fail"},\n {"line": 200, "message": "block"},\n ],\n },\n "2error": {\n "type": "Compiler Error",\n "occurrence": [\n {"line": 500, "message": "fail"},\n {"line": 640, "message": "xyz"},\n {"line": 700, "message": "pqr"},\n ],\n },\n },\n {\n "bug": {\n "type": "Brain malfunctioned",\n "occurrence": [\n {"line": 150, "message": "abort!"},\n {"line": 23, "message": "shutdown"},\n ],\n },\n "error": {\n "type": "Computer crashed",\n "occurrence": [\n {"line": 341, "message": "blocked"},\n {"line": 4, "message": "blocked"},\n {"line": 74, "message": "math error"},\n ],\n },\n }\n]\n')),Object(o.b)("p",null,"Let's say we only want to collect line numbers. You have to specify\nthe following pattern and it'll give you all the line numbers in a\nlist."),Object(o.b)("p",null,"Pattern:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-python"}),"# Pattern\n%|data{_all_, _all_, occurrence, _all_, line}|%\n\n# Output\n[10, 20, 50, 64, 70, 100, 200, 500, 640, 700, 150, 23, 341, 4, 74]\n")),Object(o.b)("p",null,"There are a few things to note here:"),Object(o.b)("ol",null,Object(o.b)("li",{parentName:"ol"},"Patterns are specified when accessing a variable."),Object(o.b)("li",{parentName:"ol"},"Patterns are defined inside curly braces after the variable name.\nNo spaces allowed. Multiple sets of curly braces ",Object(o.b)("inlineCode",{parentName:"li"},"{patter\n1}{pattern 2}...")," can be specified without any spaces (see example\nat the end)."),Object(o.b)("li",{parentName:"ol"},"Items in the pattern are comma-separated."),Object(o.b)("li",{parentName:"ol"},Object(o.b)("inlineCode",{parentName:"li"},"_all_")," as described in the next paragraphs, signals to ZeuZ Node\nto loop through all the values in the list/dictionary.")),Object(o.b)("p",null,"What's ",Object(o.b)("inlineCode",{parentName:"p"},"_all_"),"? By putting the ",Object(o.b)("inlineCode",{parentName:"p"},"_all_")," property you're essentially\nasking the collector to loop through any items (be it a list or a\ndictionary). The first ",Object(o.b)("inlineCode",{parentName:"p"},"_all_")," loops through the first level of items\n(two dictionaries in this case) inside the root list. The second\n",Object(o.b)("inlineCode",{parentName:"p"},"_all_")," loops through the ",Object(o.b)("strong",{parentName:"p"},"values")," of the dictionaries (ignoring the\ndictionary keys). Next, we're asking for the ",Object(o.b)("inlineCode",{parentName:"p"},"occurrence")," items which\nare present inside each of the dictionaries at the third level. Notice\nthat, ",Object(o.b)("inlineCode",{parentName:"p"},"occurrence")," itself is yet another list. So, we loop through\n",Object(o.b)("inlineCode",{parentName:"p"},"_all_")," the items inside it. And lastly, we collect ",Object(o.b)("inlineCode",{parentName:"p"},"line"),". Done!"),Object(o.b)("p",null,"Let's see a few more patterns and their outputs:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-python"}),"%|data{_all_, _all_, type}|%\n# Output of pattern 1\n['Runtime Error', 'Compiler Error', 'Runtime Error', 'Compiler Error', 'Brain malfunctioned', 'Computer crashed']\n\n%|data{_all_, *error, type}|%\n# Output of pattern 2\n['Runtime Error', 'Compiler Error', 'Computer crashed']\n\n%|data{_all_, error*, occurrence, _all_, line}|%\n# Output of pattern_3\n[10, 20, 50, 64, 70, 341, 4, 74]\n\n%|data{1, bug, occurrence, 1, message}|%\n# Output of pattern 4\n'shutdown'\n")),Object(o.b)("p",null,"Notice that you can specify partial names for dictionary keys using\n",Object(o.b)("inlineCode",{parentName:"p"},"*")," before or after a name. In the case of ",Object(o.b)("strong",{parentName:"p"},"pattern 2"),', we wanted\nall errors ending with the word "error". So the pattern is ',Object(o.b)("inlineCode",{parentName:"p"},"*error"),".\nIn case of ",Object(o.b)("strong",{parentName:"p"},"pattern 3"),' we wanted all errors starting with the word\n"error", so the pattern is ',Object(o.b)("inlineCode",{parentName:"p"},"error*"),".You can access to specific data using the index value in data-collector like ",Object(o.b)("strong",{parentName:"p"},"pattern 4"),"."),Object(o.b)("p",null,"You can also zip together multiple collected items using the syntax\n",Object(o.b)("inlineCode",{parentName:"p"},"%|data{pattern_1}{pattern_2}|%"),". For example:"),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-python"}),'%|data{_all_, _all_, occurrence, _all_, line}{all_, _all_, occurrence, _all_, message}|%\n\n# Output\n[\n (10, "fail"),\n (20, "block"),\n (50, "fail"),\n (64, "xyz"),\n (70, "pqr"),\n (100, "fail"),\n (200, "block"),\n (500, "fail"),\n (640, "xyz"),\n (700, "pqr"),\n (150, "abort!"),\n (23, "shutdown"),\n (341, "blocked"),\n (4, "blocked"),\n (74, "math error")\n]\n')),Object(o.b)("p",null,Object(o.b)("strong",{parentName:"p"},"Key collector")),Object(o.b)("p",null,"Key collector collects all the values of specific key from the data .Sometimes data can be\nso nested or complex that you have to access into so many elements to get the value of your specific key.\nKey collector tool can handle this quite easily.You have to just pass the key name into round bracket along\nwith data name."),Object(o.b)("pre",null,Object(o.b)("code",Object(a.a)({parentName:"pre"},{className:"language-python"})," #pattern 1\n %|data(line)|%\n # Output\n {'line': [10, 20, 50, 64, 70, 100, 200, 500, 640, 700]}\n \n #pattern 2\n %|data(line, message)|%\n # Output\n {'line': [10, 20, 50, 64, 70, 100, 200, 500, 640, 700], 'message': ['fail', 'block', 'fail', 'xyz', 'pqr', 'fail', 'block', 'fail', 'xyz', 'pqr']}\n \n #pattern3\n %|data(line)(message, type)|% \n # Output\n [{'line': [10, 20, 50, 64, 70, 100, 200, 500, 640, 700]}, {'message': ['fail', 'block', 'fail', 'xyz', 'pqr', 'fail', 'block', 'fail', 'xyz', 'pqr'], 'type': ['Runtime Error', 'Compiler Error', 'Runtime Error', 'Compiler Error']}]\n")),Object(o.b)("p",null,"Key collector will extract all the value of the given key from all over the data. You can also\nuse multiple keys in key collector like ",Object(o.b)("strong",{parentName:"p"},"pattern 2")," & ",Object(o.b)("strong",{parentName:"p"},"pattern 3")," above."))}p.isMDXComponent=!0},192:function(e,t,n){"use strict";n.d(t,"a",(function(){return u})),n.d(t,"b",(function(){return m}));var a=n(0),r=n.n(a);function o(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function l(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,a)}return n}function i(e){for(var t=1;t<arguments.length;t++){var n=null!=arguments[t]?arguments[t]:{};t%2?l(Object(n),!0).forEach((function(t){o(e,t,n[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(n,t))}))}return e}function c(e,t){if(null==e)return{};var n,a,r=function(e,t){if(null==e)return{};var n,a,r={},o=Object.keys(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||(r[n]=e[n]);return r}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a<o.length;a++)n=o[a],t.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(r[n]=e[n])}return r}var s=r.a.createContext({}),p=function(e){var t=r.a.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):i(i({},t),e)),n},u=function(e){var t=p(e.components);return r.a.createElement(s.Provider,{value:t},e.children)},b={inlineCode:"code",wrapper:function(e){var t=e.children;return r.a.createElement(r.a.Fragment,{},t)}},d=r.a.forwardRef((function(e,t){var n=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,s=c(e,["components","mdxType","originalType","parentName"]),u=p(n),d=a,m=u["".concat(l,".").concat(d)]||u[d]||b[d]||o;return n?r.a.createElement(m,i(i({ref:t},s),{},{components:n})):r.a.createElement(m,i({ref:t},s))}));function m(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=n.length,l=new Array(o);l[0]=d;var i={};for(var c in t)hasOwnProperty.call(t,c)&&(i[c]=t[c]);i.originalType=e,i.mdxType="string"==typeof e?e:a,l[1]=i;for(var s=2;s<o;s++)l[s]=n[s];return r.a.createElement.apply(null,l)}return r.a.createElement.apply(null,n)}d.displayName="MDXCreateElement"}}]);