{"componentChunkName":"component---src-templates-default-template-tsx","path":"/ki-syntax/definitions/example/","result":{"data":{"asciidoc":{"id":"2d092aec-6db0-575a-b573-f2940a2ddaf3","html":"<div id=\"toc\" class=\"toc\">\n<div id=\"toctitle\">Table of Contents</div>\n<ul class=\"sectlevel1\">\n<li><a href=\"#_1_full_example\">1.Full Example</a></li>\n<li><a href=\"#_2_retry_action_ki\">2.Retry action KI</a></li>\n<li><a href=\"#_3_add_comment_to_ticketing_system_valuemation\">3.Add Comment to ticketing System (Valuemation)</a></li>\n<li><a href=\"#_4_fallback_ki_to_trigger_when_a_task_remains_unresolved\">4. Fallback KI to trigger when a task remains unresolved</a></li>\n<li><a href=\"#_5_checking_spelling\">5. Checking Spelling</a></li>\n<li><a href=\"#_6_working_with_dates\">6. Working with dates</a></li>\n<li><a href=\"#_7_querying_graph\">7. Querying Graph</a></li>\n<li><a href=\"#_8_approval_ah_ki\">8. Approval AH KI</a></li>\n<li><a href=\"#_9_writing_atomic_kis\">9. Writing Atomic KIs</a></li>\n</ul>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_1_full_example\">1.Full Example</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"Just a simple test KI\"\non\n  NodeType    # exists\n  not NodeFoo # not exists\n  (NodeType == \"Machine\")\n  OSName =~ \"(SLES|Centos)\"\n  (OSVersion &gt; \"7\") and (OSVersion &lt; \"10\") # or OSVersion in 7..10 ?\n  with Type@in as ParentScope\n    (NodeType == \"Resource\") or (NodeType == \"Software\")\n    MonitoringEnabled\n  end\nwhen\n  VarA\n  VarB[\"key\"] # match on key\n  VarC[VarA] == NodeType\n  list VarD\n  VarF as Test\n  MonitoringStatus@in == \"true\"\ndo\n  log.info(\"bind ki and execute do\")\n  VarB[\"new_key\"] = 1\n  add(NewVar[\"key\"] = \"1\")\n  delete(VarA)\n  stdout: ExecuteOutput, exit: LOCAL::Error = execute(\"path/to/script\", timeout: 60)\n  if Error then\n    log.error(\"command returned non-zero exit code\")\n  else\n    log(\"execute returned ${ExecuteOutput}\")\n  end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_2_retry_action_ki\">2.Retry action KI</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"This KI will retry execution up to three times upon AH failure\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  ProcessIssue\n  ticketId == \"IN-XXXXX\"\n  ? counter &lt; 3 := 0\n  ogit/Automation/processingTimestamp\n\ndo\n  #AH to the Solve ticket\n  LOCAL::SYSTEMRC = \"1\"\n\n  if LOCAL::SYSTEMRC == \"0\" then\n   delete(ProcessIssue)\n  else\n   log.error(\"process ticket failed\")\n   counter = counter + 1\n   log(counter)\n end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_3_add_comment_to_ticketing_system_valuemation\">3.Add Comment to ticketing System (Valuemation)</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"Update the ticket with a comment stored directly in the ToDo AddComment\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  AddComment\n  ticketId\n  valEnterpriseId\n\ndo\n\n  # Call to update a Ticket in Valuemation with a ticket message\n  body: LOCAL::BODY,\n  code: LOCAL::CODE,\n  headers: LOCAL::HEADERS,\n  exit: LOCAL::ACTIONSYSTEMRC = action(capability: \"UpdateTicket\",\n  mainDescription: \"ticket description\",\n  ticketNo: \"${ticketId}\",\n  descriptionBody: \"${AddComment}\",\n  descriptionTitle: \"Updating ticket\",\n  tenantId: \"${valEnterpriseId}\"\n  )\n\n  if LOCAL::CODE == \"200\" then\n   delete(AddComment)\n  else\n    log(\"Updating ticket failed\")\n  end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_4_fallback_ki_to_trigger_when_a_task_remains_unresolved\">4. Fallback KI to trigger when a task remains unresolved</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"KI to be trigger before the datagroup.de:Default:AutoStopIdleIssues KI, it will forward the ticket to the responsible support Group for manual resolution\"\n  tier: \"fallback\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  ? ogit/Automation/maxIdleTime@any := 6\n  ExecIdle &gt; ogit/Automation/maxIdleTime\n  ticketId\n  assignmentGroup == \"Bardioc\"\n  responsibleSupportGroup\n  description\n\ndo\n\n  body: LOCAL::BODY,\n  code: LOCAL::CODE,\n  headers: LOCAL::HEADERS,\n  exit: LOCAL::ACTIONSYSTEMRC = action(capability: \"ForwardTicket\",\n  ticketNo: \"${ticketId}\",\n  supportGroup: \"${responsibleSupportGroup}\",\n  description: \"${description}\"\n  )\n\n  # result interpretation\n  if LOCAL::CODE == \"200\" then\n    log(\"Forwarded to support group\")\n  else\n    log(\"Forward Ticket to support group failed\")\n  end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_5_checking_spelling\">5. Checking Spelling</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"Before start any further steps you have to check if the first and last name contains special letter like ä,ö,ü or accent mark\\. If so you have to remove or correct it\"\n  tier: \"fallback\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  CheckSpelling\n  vorname\n\ndo\n\n  exit: LOCAL::EXIT, result: LOCAL::vor = javascript('\n    spechrs = {    \"ä\" : \"ae\", \"ö\" : \"oe\", \"ü\" : \"ue\", \"ß\" : \"ss\",\n                   \"Ä\" : \"Ae\", \"Ö\" : \"Oe\", \"Ü\" : \"Ue\",\n                   \"á\" : \"a\", \"â\" : \"a\", \"Á\" : \"A\", \"Â\" : \"A\",\n                   \"é\" : \"e\", \"ê\" : \"e\", \"É\" : \"E\", \"Ê\" : \"E\",\n                   \"í\" : \"i\", \"î\" : \"i\", \"Í\" : \"I\", \"Î\" : \"I\",\n                   \"ó\" : \"o\", \"ô\" : \"o\", \"Ó\" : \"O\", \"Ô\" : \"O\",\n                   \"ú\" : \"u\", \"û\" : \"u\", \"Ú\" : \"U\", \"Û\" : \"U\",\n              }\n    str = \"${vorname}\"\n    for(chr in spechrs)\n    {\n        str = str.replace(new RegExp(chr,\"g\"),spechrs[chr])\n    }\n    str\n')\n\n  # result interpretation\n  if LOCAL::EXIT == \"0\" then\n    vorname = LOCAL::vor\n    log(\"Name has been reviewed\")\n    delete(CheckSpelling)\n  else\n    log(\"Failed to check Name spelling\")\n  end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_6_working_with_dates\">6. Working with dates</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"example on how to manipulate dates\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  ProcessIssue\n\ndo\n\n  # Displays current date into a given date format\n  result: LOCAL::DATE = dateprint(format: \"%A, %Oe, %B, %Y %H:%M:%S\")\n  log(\"Current date formatted as: Weekday, Day of the Month, Month, Year Time: ${LOCAL::DATE}\")\n\n  # Converts date into timestamp\n LOCAL::DATE1 = \"2024-11-05T18:00\"\n result: LOCAL::DATEMS = javascript(\"\n    let date = new Date(`${DATE1}`).getTime();\n    date;\n  \")\n log(\"Date as a timestamp: ${LOCAL::DATEMS}\")\n\n  # Convert timestamp to a given date format\n  result: date = dateprint(timestamp: LOCAL::DATEMS, format: \"%d.%m.%Y\")\n  log(\"Date formatted as: Day.Month.Year ${date}\")</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_7_querying_graph\">7. Querying Graph</h2>\n<div class=\"sectionbody\">\n<div class=\"listingblock\">\n<div class=\"content\">\n<pre class=\"highlight\"><code class=\"language-elixir\" data-lang=\"elixir\">ki\n  name: \"TestKi\"\n  version: \"0@NoName\"\n  description: \"example on how to query the graph\"\non\n  ogit/name == \"default_issue_node\"\n\nwhen\n  GraphQuery == \"Graph Query 1\"\ndo\n  # Graph Query\n  # LOCAL::NODEID contains the list of found ogit/_id\n  LOCAL::NODEID = \"\"\n  exit: LOCAL::EXIT,\n  output: LOCAL::OUTPUT = query('vertices', 'ogit\\/_type:ogit\\/MARS\\/Machine ',\n    fields: \"ogit/_id\",\n    each: begin\n     LOCAL::NODEID = \"${ogit/_id}\"\n     log(LOCAL::NODEID)\n    end\n   )\n\n  # result interpretation\n  if LOCAL::EXIT == \"0\" then\n    delete(GraphQuery)\n  else\n    log(\"Failed to complete the query\")\n  end</code></pre>\n</div>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_8_approval_ah_ki\">8. Approval AH KI</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Visit the whole guide about the approval AH <a href=\"https://user-guides.engine.datagroup.de/attachments/ApprovalAH.pdf\">here</a></p>\n</div>\n</div>\n</div>\n<div class=\"sect1\">\n<h2 id=\"_9_writing_atomic_kis\">9. Writing Atomic KIs</h2>\n<div class=\"sectionbody\">\n<div class=\"paragraph\">\n<p>Please see a full example in <a href=\"https://user-guides.engine.datagroup.de/attachments/AtomicKIs.pdf\">here</a></p>\n</div>\n</div>\n</div>","document":{"main":"9.KI examples","title":"9.KI examples","subtitle":""},"fields":{"toc":true,"location":["ki-syntax","definitions","example"]}},"sidebarYaml":{"id":"6f28bdca-d703-5e79-ae00-b0508f8ee82a","showIndex":true}},"pageContext":{"id":"2d092aec-6db0-575a-b573-f2940a2ddaf3","parent":"ki-syntax"}},"staticQueryHashes":["1010459453","1010459453","2356112386","2356112386","2603905930","2603905930","3026652197","3026652197","3167850324","3167850324","63159454","63159454"]}