{"id":988,"date":"2019-10-22T11:09:03","date_gmt":"2019-10-22T09:09:03","guid":{"rendered":"http:\/\/blog.zhaw.ch\/splab\/?p=988"},"modified":"2019-10-22T11:09:04","modified_gmt":"2019-10-22T09:09:04","slug":"presenting-the-mao-orchestrator","status":"publish","type":"post","link":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/","title":{"rendered":"Presenting the MAO Orchestrator"},"content":{"rendered":"\n<p>The <a href=\"https:\/\/mao-mao-research.github.io\/\">MAO-MAO research collaboration<\/a> aims to provide metrics, analytics and quality control for microservice artefacts of all kinds, including but not limited to, Docker containers, Helm charts and AWS Lambda functions. As such, an integral part of prior research has been the various periodic data collection experiments, gathering metadata and conducting automatic code analysis.<br><\/p>\n\n\n\n<p>However, the ambition of the project to collect data consistently, combined with the need for the collaborators to be able to use each other\u2019s tools and access each other\u2019s data, have created a need for a collaboration framework and distributed execution platform.<br><\/p>\n\n\n\n<p>In response to this need, we present the first release of the <a href=\"https:\/\/github.com\/serviceprototypinglab\/mao-orchestrator\">MAO Orchestrator<\/a>, a tool designed to run these experiments in a smart way and on a schedule, within a federated cluster across research sites. As a plus, there is nothing implementation-wise tying it to the existing assessment tools, so it is reusable for any use-case that requires collaboratively running periodic experiments.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h3 class=\"wp-block-heading\">Features<\/h3>\n\n\n\n<ul class=\"wp-block-list\"><li>Scheduler subsystem combined with <a href=\"https:\/\/www.docker.com\/\">Docker<\/a> interface to execute the tools<\/li><li><a href=\"https:\/\/etcd.io\/\">Etcd<\/a> cluster to share data among collaborators<\/li><li>Built-in spike detector with notification system to notify the operator of anomalies\/regressions in the data<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"641\" height=\"611\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\" alt=\"\" class=\"wp-image-989\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png 641w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised-300x286.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised-24x24.png 24w\" sizes=\"auto, (max-width: 641px) 100vw, 641px\" \/><figcaption>Architecture of the Orchestrator<\/figcaption><\/figure>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter\"><img loading=\"lazy\" decoding=\"async\" width=\"481\" height=\"271\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/jobcolorised.png\" alt=\"\" class=\"wp-image-990\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/jobcolorised.png 481w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/jobcolorised-300x169.png 300w\" sizes=\"auto, (max-width: 481px) 100vw, 481px\" \/><figcaption>Anatomy of a job<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Setup and Usage<\/h3>\n\n\n\n<p>Assuming the host already has Python 3 and Docker installed, the only tricky component to setup would be etcd. For basic testing it is enough to install and run etcd and make sure the host and port in the <code>config.ini<\/code> file of the tool is correct, but for proper clustering one would have to use one of the clustering methods mentioned in <a href=\"https:\/\/github.com\/etcd-io\/etcd\/blob\/master\/Documentation\/op-guide\/clustering.md\">etcd\u2019s documentation<\/a>. We plan to develop our own automated discovery system once we have enough volunteers to test the system in a real federated cluster.<br><\/p>\n\n\n\n<p>Once the platform is running, the interactions can be made using our command-line client, <code>maoctl<\/code>, which we will now briefly present. Detailed documentation is available on Github, where you can also find a set of guidelines for creating compliant tools that can be run on the platform. If that sounds intimidating, rest assured that if a tool can be run from a single Docker container non-interactively and write output to a file, it can very easily be made to comply with the Orchestrator.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">MAOCTL<\/h3>\n\n\n\n<p><code>maoctl<\/code> is a command line client for the Orchestrator, serving to eliminate complex HTTP requests and provide unified I\/O for all user interactions with it. It has two subcommands:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>tool <\/strong>which allows users to list, register, test or schedule their tools<\/li><li><strong>dataset<\/strong> which allows users to list, register or clone datasets<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Demo<\/h3>\n\n\n\n<p>Here is an example of using the Orchestrator with <code>maoctl<\/code> to run a tool:<\/p>\n\n\n\n<p>First we list the tools to see what tools we have available. In a real cluster, tools registered by a user are visible to and usable by all other users.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"833\" height=\"64\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao1.png\" alt=\"\" class=\"wp-image-992\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao1.png 833w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao1-300x23.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao1-768x59.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao1-676x52.png 676w\" sizes=\"auto, (max-width: 833px) 100vw, 833px\" \/><figcaption>Listing the tools<\/figcaption><\/figure>\n\n\n\n<p>Now we can schedule the tool we want to run, but before we do that, we should test it by running it immediately, this is done with the run subcommand. Here it also prints the result of the spike detector. If this is the first time we run the tool, it will also clone the associated dataset.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"297\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2-1024x297.png\" alt=\"\" class=\"wp-image-993\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2-1024x297.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2-300x87.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2-768x222.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2-676x196.png 676w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao2.png 1143w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Output of test-running the test tool<\/figcaption><\/figure>\n\n\n\n<p>Here is the JSON object representing the tool in etcd:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n    \"name\": \"test2\",\n    \"author\": \"panos\",\n    \"image\": \"31f1c369c777\",\n    \"data_repo\":\"https:\/\/github.com\/EcePanos\/sar-static-data.git\",\n    \"code_repo\":\"https:\/\/github.com\/EcePanos\/sar-static-data.git\",\n    \"artefact\":\"test\"\n}\n<\/code><\/pre>\n\n\n\n<p>Now we can schedule it to run daily or weekly.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"162\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3-1024x162.png\" alt=\"\" class=\"wp-image-994\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3-1024x162.png 1024w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3-300x47.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3-768x121.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3-676x107.png 676w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao3.png 1305w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Scheduling a daily job<\/figcaption><\/figure>\n\n\n\n<p>If a user is not interested in running the tools but only wants access to the datasets, they can use the dataset subcommand to clone registered datasets directly.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"59\" src=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao4.png\" alt=\"\" class=\"wp-image-995\" srcset=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao4.png 850w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao4-300x21.png 300w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao4-768x53.png 768w, https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/mao4-676x47.png 676w\" sizes=\"auto, (max-width: 850px) 100vw, 850px\" \/><figcaption>Directly cloning a registered dataset<\/figcaption><\/figure>\n\n\n\n<p>The orchestrator will thus help to maintain and operate a resilient research infrastructure for empirical research on software quality. Of course, the development of the Orchestrator is meant to be community-driven and we welcome all feedback. Check out <a href=\"https:\/\/github.com\/serviceprototypinglab\/mao-orchestrator\">the code<\/a>!<\/p>\n<div class=\"pt-sm\">Schlagw\u00f6rter: <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/artefacts\/\">artefacts<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/docker\/\">docker<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/maomao\/\">maomao<\/a>, <a href=\"http:\/\/blog.zhaw.ch\/splab\/tag\/microservices\/\">microservices<\/a><br><\/div>","protected":false},"excerpt":{"rendered":"<p>The MAO-MAO research collaboration aims to provide metrics, analytics and quality control for microservice artefacts of all kinds, including but not limited to, Docker containers, Helm charts and AWS Lambda functions. As such, an integral part of prior research has been the various periodic data collection experiments, gathering metadata and conducting automatic code analysis. However, [&hellip;]<\/p>\n","protected":false},"author":438,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[4],"tags":[92,44,37,39],"features":[],"class_list":["post-988","post","type-post","status-publish","format-standard","hentry","category-research","tag-artefacts","tag-docker","tag-maomao","tag-microservices"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.2 (Yoast SEO v27.2) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Presenting the MAO Orchestrator - Service Prototyping Lab<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\" \/>\n<meta property=\"og:locale\" content=\"en_GB\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Presenting the MAO Orchestrator\" \/>\n<meta property=\"og:description\" content=\"The MAO-MAO research collaboration aims to provide metrics, analytics and quality control for microservice artefacts of all kinds, including but not limited to, Docker containers, Helm charts and AWS Lambda functions. As such, an integral part of prior research has been the various periodic data collection experiments, gathering metadata and conducting automatic code analysis. However, [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\" \/>\n<meta property=\"og:site_name\" content=\"Service Prototyping Lab\" \/>\n<meta property=\"article:published_time\" content=\"2019-10-22T09:09:03+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-10-22T09:09:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\" \/>\n<meta name=\"author\" content=\"Panagiotis Gkikopoulos\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Panagiotis Gkikopoulos\" \/>\n\t<meta name=\"twitter:label2\" content=\"Estimated reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\"},\"author\":{\"name\":\"Panagiotis Gkikopoulos\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11\"},\"headline\":\"Presenting the MAO Orchestrator\",\"datePublished\":\"2019-10-22T09:09:03+00:00\",\"dateModified\":\"2019-10-22T09:09:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\"},\"wordCount\":637,\"commentCount\":0,\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\",\"keywords\":[\"artefacts\",\"docker\",\"maomao\",\"microservices\"],\"articleSection\":[\"Research\"],\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\",\"name\":\"Presenting the MAO Orchestrator - Service Prototyping Lab\",\"isPartOf\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\",\"datePublished\":\"2019-10-22T09:09:03+00:00\",\"dateModified\":\"2019-10-22T09:09:04+00:00\",\"author\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#breadcrumb\"},\"inLanguage\":\"en-GB\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\",\"contentUrl\":\"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/blog.zhaw.ch\/splab\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Presenting the MAO Orchestrator\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#website\",\"url\":\"https:\/\/blog.zhaw.ch\/splab\/\",\"name\":\"Service Prototyping Lab\",\"description\":\"A Blog of the ZHAW Zurich University of Applied Sciences\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-GB\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11\",\"name\":\"Panagiotis Gkikopoulos\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-GB\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g\",\"caption\":\"Panagiotis Gkikopoulos\"},\"url\":\"https:\/\/blog.zhaw.ch\/splab\/author\/pang\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Presenting the MAO Orchestrator - Service Prototyping Lab","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/","og_locale":"en_GB","og_type":"article","og_title":"Presenting the MAO Orchestrator","og_description":"The MAO-MAO research collaboration aims to provide metrics, analytics and quality control for microservice artefacts of all kinds, including but not limited to, Docker containers, Helm charts and AWS Lambda functions. As such, an integral part of prior research has been the various periodic data collection experiments, gathering metadata and conducting automatic code analysis. However, [&hellip;]","og_url":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/","og_site_name":"Service Prototyping Lab","article_published_time":"2019-10-22T09:09:03+00:00","article_modified_time":"2019-10-22T09:09:04+00:00","og_image":[{"url":"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png","type":"","width":"","height":""}],"author":"Panagiotis Gkikopoulos","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Panagiotis Gkikopoulos","Estimated reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#article","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/"},"author":{"name":"Panagiotis Gkikopoulos","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11"},"headline":"Presenting the MAO Orchestrator","datePublished":"2019-10-22T09:09:03+00:00","dateModified":"2019-10-22T09:09:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/"},"wordCount":637,"commentCount":0,"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png","keywords":["artefacts","docker","maomao","microservices"],"articleSection":["Research"],"inLanguage":"en-GB","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/","url":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/","name":"Presenting the MAO Orchestrator - Service Prototyping Lab","isPartOf":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage"},"image":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage"},"thumbnailUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png","datePublished":"2019-10-22T09:09:03+00:00","dateModified":"2019-10-22T09:09:04+00:00","author":{"@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11"},"breadcrumb":{"@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#breadcrumb"},"inLanguage":"en-GB","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/"]}]},{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#primaryimage","url":"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png","contentUrl":"https:\/\/blog.zhaw.ch\/splab\/files\/2019\/10\/archcolorised.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.zhaw.ch\/splab\/2019\/10\/22\/presenting-the-mao-orchestrator\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/blog.zhaw.ch\/splab\/"},{"@type":"ListItem","position":2,"name":"Presenting the MAO Orchestrator"}]},{"@type":"WebSite","@id":"https:\/\/blog.zhaw.ch\/splab\/#website","url":"https:\/\/blog.zhaw.ch\/splab\/","name":"Service Prototyping Lab","description":"A Blog of the ZHAW Zurich University of Applied Sciences","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.zhaw.ch\/splab\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-GB"},{"@type":"Person","@id":"https:\/\/blog.zhaw.ch\/splab\/#\/schema\/person\/6a362b2982b686a44a453206cb3cee11","name":"Panagiotis Gkikopoulos","image":{"@type":"ImageObject","inLanguage":"en-GB","@id":"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/88f238fea03fa1a0fe3ee06ef74194f1b2f1ebde2deecb56364cf02b2eb18ec2?s=96&d=mm&r=g","caption":"Panagiotis Gkikopoulos"},"url":"https:\/\/blog.zhaw.ch\/splab\/author\/pang\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/988","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/users\/438"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/comments?post=988"}],"version-history":[{"count":6,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/988\/revisions"}],"predecessor-version":[{"id":1006,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/posts\/988\/revisions\/1006"}],"wp:attachment":[{"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/media?parent=988"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/categories?post=988"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/tags?post=988"},{"taxonomy":"features","embeddable":true,"href":"https:\/\/blog.zhaw.ch\/splab\/wp-json\/wp\/v2\/features?post=988"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}