{"id":28431,"date":"2023-10-09T14:31:34","date_gmt":"2023-10-09T12:31:34","guid":{"rendered":"https:\/\/www.dbi-services.com\/blog\/?p=28431"},"modified":"2024-09-11T10:16:08","modified_gmt":"2024-09-11T08:16:08","slug":"keep-your-softwares-up-to-date-with-zabbix","status":"publish","type":"post","link":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/","title":{"rendered":"Keep Your Software&#8217;s Up to Date with Zabbix"},"content":{"rendered":"\n<p>Monitoring tools are increasingly going beyond their usual perimeter of just monitoring metrics. Modern tools, like Zabbix, can watch files for any change and raise warning whenever it occurs. An example I found the &#8220;Linux by Zabbix agent&#8221; template: Computing the <code>\/etc\/passwd<\/code> checksum and raise an alert if it changes.<\/p>\n\n\n\n<p>In this blog post, I will explain how to get information about the latest WildFly version available and raise a trigger (ie. alert in Zabbix language) whenever a new version is available and does not match the installed version.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-getting-latest-version\">Getting Latest Version<\/h2>\n\n\n\n<p>I will create a item of type HTTP agent to get this information from WildFly website (https:\/\/www.wildfly.org\/downloads\/). I don&#8217;t want this HTTP GET to run for each WildFly server as it will add unnecessary calls to their website. So, the item must be associated to the host which is unique in my Zabbix system: <mark class=\"has-inline-color has-luminous-vivid-amber-color\">The Zabbix server.<\/mark><\/p>\n\n\n\n<p>In Zabbix Front End, on the Zabbix server, I create a new item with the following setting:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"799\" height=\"212\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_37_53-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox.png\" alt=\"\" class=\"wp-image-28549\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_37_53-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox.png 799w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_37_53-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-300x80.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_37_53-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-768x204.png 768w\" sizes=\"auto, (max-width: 799px) 100vw, 799px\" \/><\/figure>\n\n\n\n<p>I chose to name it &#8220;wildfly.version.latest&#8221;.<\/p>\n\n\n\n<p>As is, this item will store the whole HTML result of the page which I am obviously not interested in. So, I need to add preprocessing steps to extract the version:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"141\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_43_49-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-1024x141.png\" alt=\"\" class=\"wp-image-28550\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_43_49-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-1024x141.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_43_49-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-300x41.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_43_49-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-768x106.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_43_49-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox.png 1182w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>I looked inside the page code and came to the regular expression on the screenshot. &#8220;<code>\\1<\/code>&#8221; will be the first match. The second preprocessing step is to avoid storing the result every time. There is no need to store it if the version does not change.<\/p>\n\n\n\n<p>A quick check on latest data shows that it works perfectly:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"941\" height=\"62\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_49_18-zabbix_-Latest-data-\u2014-Mozilla-Firefox.png\" alt=\"\" class=\"wp-image-28551\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_49_18-zabbix_-Latest-data-\u2014-Mozilla-Firefox.png 941w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_49_18-zabbix_-Latest-data-\u2014-Mozilla-Firefox-300x20.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_49_18-zabbix_-Latest-data-\u2014-Mozilla-Firefox-768x51.png 768w\" sizes=\"auto, (max-width: 941px) 100vw, 941px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-creating-a-trigger\">Creating a Trigger<\/h2>\n\n\n\n<p>I had to do several try-and-fail because it is not possible to share data between two different templates. It can raise this kind of error:<\/p>\n\n\n\n<p>Trigger &#8220;Not latest software installed&#8221; belongs to templates with different linkages.<\/p>\n\n\n\n<p>That&#8217;s why I associated &#8220;wildfly.version.latest&#8221; item directly to the Zabbix server. Now, how to compare it with installed WildFly version? First, I need to make the data available from the WildFly template. To do so, I simply create a calculated item which looks like this:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"732\" height=\"333\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_58_46-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox.png\" alt=\"\" class=\"wp-image-28552\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_58_46-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox.png 732w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-13_58_46-zabbix_-Configuration-of-items-\u2014-Mozilla-Firefox-300x136.png 300w\" sizes=\"auto, (max-width: 732px) 100vw, 732px\" \/><\/figure>\n\n\n\n<p>The simplest trigger will be to compare the version from the download URL and the installed URL with formula:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>last(\/WildFly Server by JMX\/wildfly.version.latest)&lt;&gt;last(\/WildFly Server by JMX\/jmx&#091;\"jboss.as:management-root=server\",\"productVersion\"])<\/code><\/pre>\n\n\n\n<p>To decompose this formula:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><mark class=\"has-inline-color has-luminous-vivid-amber-color\">last<\/mark> is a trigger function that return the most recent value of what is passed as parameter<\/li>\n\n\n\n<li>\/WildFly Server by JMX\/wildfly.version.latest\n<ul class=\"wp-block-list\">\n<li>First string between two slash is the template name<\/li>\n\n\n\n<li>After slash is the item key<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Next, we have &#8220;&lt;&gt;&#8221; to compare with the second half of expression.<\/p>\n\n\n\n<p>As template is already applied, problem should arise almost immediately after trigger creation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"65\" src=\"http:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-14_13_03-zabbix_-Problems-\u2014-Mozilla-Firefox-1024x65.png\" alt=\"\" class=\"wp-image-28553\" srcset=\"https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-14_13_03-zabbix_-Problems-\u2014-Mozilla-Firefox-1024x65.png 1024w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-14_13_03-zabbix_-Problems-\u2014-Mozilla-Firefox-300x19.png 300w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-14_13_03-zabbix_-Problems-\u2014-Mozilla-Firefox-768x49.png 768w, https:\/\/www.dbi-services.com\/blog\/wp-content\/uploads\/sites\/2\/2023\/10\/2023-10-09-14_13_03-zabbix_-Problems-\u2014-Mozilla-Firefox.png 1089w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now, you are aware that a new release is available, and you can update it.<\/p>\n\n\n\n<p>As &#8220;OK event generation&#8221; is set to expression, problem will automatically close whenever WildFly will be updated to the latest release available on download site.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-next-steps\">Next Steps<\/h2>\n\n\n\n<p>As Zabbix supports <a href=\"https:\/\/www.dbi-services.com\/blog\/ansible-event-driven-automation\/\" target=\"_blank\" rel=\"noreferrer noopener\">Event-Driven Ansible<\/a>, it should not be too difficult to call a Wildfly upgrade playbook directly from Zabbix server without any human intervention (if this is really you want to do :)).<\/p>\n\n\n\n<p>A possible improvement could be to only get an alert whenever a new final version is released and not a beta release.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Monitoring tools are increasingly going beyond their usual perimeter of just monitoring metrics. Modern tools, like Zabbix, can watch files for any change and raise warning whenever it occurs. An example I found the &#8220;Linux by Zabbix agent&#8221; template: Computing the \/etc\/passwd checksum and raise an alert if it changes. In this blog post, I [&hellip;]<\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[197],"tags":[25,2430],"type_dbi":[],"class_list":["post-28431","post","type-post","status-publish","format-standard","hentry","category-application-integration-middleware","tag-security","tag-zabbix"],"acf":[],"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>Keep Your Software&#039;s Up to Date with Zabbix - dbi Blog<\/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:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Keep Your Software&#039;s Up to Date with Zabbix\" \/>\n<meta property=\"og:description\" content=\"Monitoring tools are increasingly going beyond their usual perimeter of just monitoring metrics. Modern tools, like Zabbix, can watch files for any change and raise warning whenever it occurs. An example I found the &#8220;Linux by Zabbix agent&#8221; template: Computing the \/etc\/passwd checksum and raise an alert if it changes. In this blog post, I [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\" \/>\n<meta property=\"og:site_name\" content=\"dbi Blog\" \/>\n<meta property=\"article:published_time\" content=\"2023-10-09T12:31:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-09-11T08:16:08+00:00\" \/>\n<meta name=\"author\" content=\"Middleware Team\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Middleware Team\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\"},\"author\":{\"name\":\"Middleware Team\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"headline\":\"Keep Your Software&#8217;s Up to Date with Zabbix\",\"datePublished\":\"2023-10-09T12:31:34+00:00\",\"dateModified\":\"2024-09-11T08:16:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\"},\"wordCount\":546,\"commentCount\":0,\"keywords\":[\"Security\",\"Zabbix\"],\"articleSection\":[\"Application integration &amp; Middleware\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\",\"name\":\"Keep Your Software's Up to Date with Zabbix - dbi Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\"},\"datePublished\":\"2023-10-09T12:31:34+00:00\",\"dateModified\":\"2024-09-11T08:16:08+00:00\",\"author\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.dbi-services.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Keep Your Software&#8217;s Up to Date with Zabbix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#website\",\"url\":\"https:\/\/www.dbi-services.com\/blog\/\",\"name\":\"dbi Blog\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1\",\"name\":\"Middleware Team\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g\",\"caption\":\"Middleware Team\"},\"url\":\"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Keep Your Software's Up to Date with Zabbix - dbi Blog","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:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/","og_locale":"en_US","og_type":"article","og_title":"Keep Your Software's Up to Date with Zabbix","og_description":"Monitoring tools are increasingly going beyond their usual perimeter of just monitoring metrics. Modern tools, like Zabbix, can watch files for any change and raise warning whenever it occurs. An example I found the &#8220;Linux by Zabbix agent&#8221; template: Computing the \/etc\/passwd checksum and raise an alert if it changes. In this blog post, I [&hellip;]","og_url":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/","og_site_name":"dbi Blog","article_published_time":"2023-10-09T12:31:34+00:00","article_modified_time":"2024-09-11T08:16:08+00:00","author":"Middleware Team","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Middleware Team","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#article","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/"},"author":{"name":"Middleware Team","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"headline":"Keep Your Software&#8217;s Up to Date with Zabbix","datePublished":"2023-10-09T12:31:34+00:00","dateModified":"2024-09-11T08:16:08+00:00","mainEntityOfPage":{"@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/"},"wordCount":546,"commentCount":0,"keywords":["Security","Zabbix"],"articleSection":["Application integration &amp; Middleware"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/","url":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/","name":"Keep Your Software's Up to Date with Zabbix - dbi Blog","isPartOf":{"@id":"https:\/\/www.dbi-services.com\/blog\/#website"},"datePublished":"2023-10-09T12:31:34+00:00","dateModified":"2024-09-11T08:16:08+00:00","author":{"@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1"},"breadcrumb":{"@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.dbi-services.com\/blog\/keep-your-softwares-up-to-date-with-zabbix\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.dbi-services.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Keep Your Software&#8217;s Up to Date with Zabbix"}]},{"@type":"WebSite","@id":"https:\/\/www.dbi-services.com\/blog\/#website","url":"https:\/\/www.dbi-services.com\/blog\/","name":"dbi Blog","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.dbi-services.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.dbi-services.com\/blog\/#\/schema\/person\/8d8563acfc6e604cce6507f45bac0ea1","name":"Middleware Team","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ddcae7ba0f9d1a0e7ae707f0e689e4a9c95bb48ec49c8e6d9cc86d43f4121cb6?s=96&d=mm&r=g","caption":"Middleware Team"},"url":"https:\/\/www.dbi-services.com\/blog\/author\/middleware-team\/"}]}},"_links":{"self":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/28431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/comments?post=28431"}],"version-history":[{"count":4,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/28431\/revisions"}],"predecessor-version":[{"id":28555,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/posts\/28431\/revisions\/28555"}],"wp:attachment":[{"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/media?parent=28431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/categories?post=28431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/tags?post=28431"},{"taxonomy":"type","embeddable":true,"href":"https:\/\/www.dbi-services.com\/blog\/wp-json\/wp\/v2\/type_dbi?post=28431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}