Files
nexus/sreweekly/articles/361/01-health-checking.html
2026-09-12 17:23:01 +08:00

751 lines
98 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-GB">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name='robots' content='max-image-preview:large' />
<title>Health Checking &#8211; Srinivas Devaki</title>
<link rel='dns-prefetch' href='//secure.gravatar.com' />
<link rel='dns-prefetch' href='//widgets.wp.com' />
<link rel='dns-prefetch' href='//jetpack.wordpress.com' />
<link rel='dns-prefetch' href='//s0.wp.com' />
<link rel='dns-prefetch' href='//public-api.wordpress.com' />
<link rel='dns-prefetch' href='//0.gravatar.com' />
<link rel='dns-prefetch' href='//1.gravatar.com' />
<link rel='dns-prefetch' href='//2.gravatar.com' />
<link rel='preconnect' href='//i0.wp.com' />
<link rel='preconnect' href='//c0.wp.com' />
<link rel="alternate" type="application/rss+xml" title="Srinivas Devaki &raquo; Feed" href="https://blog.eightnoteight.dev/feed/" />
<link rel="alternate" type="application/rss+xml" title="Srinivas Devaki &raquo; Comments Feed" href="https://blog.eightnoteight.dev/comments/feed/" />
<link rel="alternate" type="application/rss+xml" title="Srinivas Devaki &raquo; Health Checking Comments Feed" href="https://blog.eightnoteight.dev/2023/02/26/health-checking/feed/" />
<link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://blog.eightnoteight.dev/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.eightnoteight.dev%2F2023%2F02%2F26%2Fhealth-checking%2F" />
<link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://blog.eightnoteight.dev/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fblog.eightnoteight.dev%2F2023%2F02%2F26%2Fhealth-checking%2F&#038;format=xml" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<link rel='stylesheet' id='all-css-ed1343d3d3a7f0c35236a7e63b3bcaf5' href='https://blog.eightnoteight.dev/wp-content/plugins/jetpack/modules/related-posts/related-posts.css?m=1771329624' type='text/css' media='all' />
<style id="wp-block-heading-inline-css">
h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/heading/style.min.css */
</style>
<style id="wp-block-spacer-inline-css">
.wp-block-spacer{clear:both}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/spacer/style.min.css */
</style>
<style id="wp-block-group-inline-css">
.wp-block-group{box-sizing:border-box}:where(.wp-block-group.wp-block-group-is-layout-constrained){position:relative}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/group/style.min.css */
</style>
<style id="wp-block-post-featured-image-inline-css">
.wp-block-post-featured-image{margin-left:0;margin-right:0}.wp-block-post-featured-image a{display:block;height:100%}.wp-block-post-featured-image :where(img){box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom;width:100%}.wp-block-post-featured-image.alignfull img,.wp-block-post-featured-image.alignwide img{width:100%}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim{background-color:#000;inset:0;position:absolute}.wp-block-post-featured-image{position:relative}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-gradient{background-color:transparent}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-0{opacity:0}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-10{opacity:.1}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-20{opacity:.2}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-30{opacity:.3}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-40{opacity:.4}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-50{opacity:.5}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-60{opacity:.6}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-70{opacity:.7}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-80{opacity:.8}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-90{opacity:.9}.wp-block-post-featured-image .wp-block-post-featured-image__overlay.has-background-dim-100{opacity:1}.wp-block-post-featured-image:where(.alignleft,.alignright){width:100%}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/post-featured-image/style.min.css */
</style>
<style id="wp-block-post-title-inline-css">
.wp-block-post-title{box-sizing:border-box;word-break:break-word}.wp-block-post-title :where(a){display:inline-block;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;text-decoration:inherit}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/post-title/style.min.css */
</style>
<style id="wp-block-post-date-inline-css">
.wp-block-post-date{box-sizing:border-box}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/post-date/style.min.css */
</style>
<style id="wp-block-paragraph-inline-css">
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/paragraph/style.min.css */
</style>
<style id="wp-block-list-inline-css">
ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/list/style.min.css */
</style>
<style id="wp-block-post-content-inline-css">
.wp-block-post-content{display:flow-root}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/post-content/style.min.css */
</style>
<style id="wp-block-post-navigation-link-inline-css">
.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous{display:inline-block;margin-right:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-previous:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next{display:inline-block;margin-left:1ch}.wp-block-post-navigation-link .wp-block-post-navigation-link__arrow-next:not(.is-arrow-chevron){transform:scaleX(1)}.wp-block-post-navigation-link.has-text-align-left[style*="writing-mode: vertical-lr"],.wp-block-post-navigation-link.has-text-align-right[style*="writing-mode: vertical-rl"]{rotate:180deg}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/post-navigation-link/style.min.css */
</style>
<style id="jetpack-block-subscriptions-inline-css">
.is-style-compact .is-not-subscriber :is(.wp-block-button__link,.wp-block-jetpack-subscriptions__button){border-end-start-radius:0!important;border-start-start-radius:0!important;margin-inline-start:0!important}.is-style-compact .is-not-subscriber .components-text-control__input,.is-style-compact .is-not-subscriber p#subscribe-email input[type=email]{border-end-end-radius:0!important;border-start-end-radius:0!important}.is-style-compact:not(.wp-block-jetpack-subscriptions__use-newline) .components-text-control__input{border-inline-end-width:0!important}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form-container{display:flex;flex-direction:column}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline:not(.wp-block-jetpack-subscriptions__use-newline) .is-not-subscriber .wp-block-jetpack-subscriptions__form-elements{align-items:flex-start;display:flex}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline:not(.wp-block-jetpack-subscriptions__use-newline) p#subscribe-submit{display:flex;justify-content:center}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__textfield .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form input[type=email],.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__textfield .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form input[type=email]{box-sizing:border-box;cursor:pointer;line-height:1.3;min-width:auto!important;white-space:nowrap!important}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form input[type=email]::placeholder,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form input[type=email]:disabled,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form input[type=email]::placeholder,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form input[type=email]:disabled{color:currentColor;opacity:.5}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form button{border-color:#0000;border-style:solid}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__textfield,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-email,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__textfield,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-email{background:#0000;flex-grow:1}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__textfield .components-base-control__field,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__textfield .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form .wp-block-jetpack-subscriptions__textfield input[type=email],.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-email .components-base-control__field,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-email .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-email input[type=email],.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__textfield .components-base-control__field,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__textfield .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form .wp-block-jetpack-subscriptions__textfield input[type=email],.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-email .components-base-control__field,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-email .components-text-control__input,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-email input[type=email]{height:auto;margin:0;width:100%}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-email,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline .wp-block-jetpack-subscriptions__form p#subscribe-submit,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-email,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline form p#subscribe-submit{line-height:0;margin:0;padding:0}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline.wp-block-jetpack-subscriptions__show-subs .wp-block-jetpack-subscriptions__subscount{font-size:16px;margin:8px 0;text-align:end}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline.wp-block-jetpack-subscriptions__use-newline .wp-block-jetpack-subscriptions__form-elements{display:block}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline.wp-block-jetpack-subscriptions__use-newline .wp-block-jetpack-subscriptions__button,.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline.wp-block-jetpack-subscriptions__use-newline button{display:inline-block;max-width:100%}.wp-block-jetpack-subscriptions.wp-block-jetpack-subscriptions__supports-newline.wp-block-jetpack-subscriptions__use-newline .wp-block-jetpack-subscriptions__subscount{text-align:start}#subscribe-submit.is-link{text-align:center;width:auto!important}#subscribe-submit.is-link a{margin-left:0!important;margin-top:0!important;width:auto!important}@keyframes jetpack-memberships_button__spinner-animation{to{transform:rotate(1turn)}}.jetpack-memberships-spinner{display:none;height:1em;margin:0 0 0 5px;width:1em}.jetpack-memberships-spinner svg{height:100%;margin-bottom:-2px;width:100%}.jetpack-memberships-spinner-rotating{animation:jetpack-memberships_button__spinner-animation .75s linear infinite;transform-origin:center}.is-loading .jetpack-memberships-spinner{display:inline-block}body.jetpack-memberships-modal-open{overflow:hidden}dialog.jetpack-memberships-modal{opacity:1}dialog.jetpack-memberships-modal,dialog.jetpack-memberships-modal iframe{background:#0000;border:0;bottom:0;box-shadow:none;height:100%;left:0;margin:0;padding:0;position:fixed;right:0;top:0;width:100%}dialog.jetpack-memberships-modal::backdrop{background-color:#000;opacity:.7;transition:opacity .2s ease-out}dialog.jetpack-memberships-modal.is-loading,dialog.jetpack-memberships-modal.is-loading::backdrop{opacity:0}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/jetpack/_inc/blocks/subscriptions/view.css?minify=false */
</style>
<style id="wp-block-columns-inline-css">
.wp-block-columns{box-sizing:border-box;display:flex;flex-wrap:wrap!important}@media (min-width:782px){.wp-block-columns{flex-wrap:nowrap!important}}.wp-block-columns{align-items:normal!important}.wp-block-columns.are-vertically-aligned-top{align-items:flex-start}.wp-block-columns.are-vertically-aligned-center{align-items:center}.wp-block-columns.are-vertically-aligned-bottom{align-items:flex-end}@media (max-width:781px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:100%!important}}@media (min-width:782px){.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns:not(.is-not-stacked-on-mobile)>.wp-block-column[style*=flex-basis]{flex-grow:0}}.wp-block-columns.is-not-stacked-on-mobile{flex-wrap:nowrap!important}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column{flex-basis:0;flex-grow:1}.wp-block-columns.is-not-stacked-on-mobile>.wp-block-column[style*=flex-basis]{flex-grow:0}:where(.wp-block-columns){margin-bottom:1.75em}:where(.wp-block-columns.has-background){padding:1.25em 2.375em}.wp-block-column{flex-grow:1;min-width:0;overflow-wrap:break-word;word-break:break-word}.wp-block-column.is-vertically-aligned-top{align-self:flex-start}.wp-block-column.is-vertically-aligned-center{align-self:center}.wp-block-column.is-vertically-aligned-bottom{align-self:flex-end}.wp-block-column.is-vertically-aligned-stretch{align-self:stretch}.wp-block-column.is-vertically-aligned-bottom,.wp-block-column.is-vertically-aligned-center,.wp-block-column.is-vertically-aligned-top{width:100%}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/styles/block-library/columns/style.min.css */
</style>
<style id="wp-emoji-styles-inline-css">
img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
.has-text-align-justify{text-align:justify;}
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-template-skip-link-inline-css">
/*! This file is auto-generated */
.skip-link.screen-reader-text{border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute!important;width:1px;word-wrap:normal!important;word-break:normal!important}.skip-link.screen-reader-text:focus{background-color:#eee;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}
/*# sourceURL=/wp-includes/css/wp-block-template-skip-link.min.css */
</style>
<style id="global-styles-inline-css">
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--primary: #000000;--wp--preset--color--secondary: #6d6466;--wp--preset--color--foreground: #000000;--wp--preset--color--background: #f5f3f1;--wp--preset--color--tertiary: #edebe9;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: clamp(0.825rem, 0.825rem + ((1vw - 0.2rem) * 0.488), 1.0625rem);--wp--preset--font-size--medium: clamp(1rem, 1rem + ((1vw - 0.2rem) * 0.513), 1.25rem);--wp--preset--font-size--large: clamp(1.75rem, 1.75rem + ((1vw - 0.2rem) * 0.513), 2rem);--wp--preset--font-size--x-large: clamp(2.5rem, 2.5rem + ((1vw - 0.2rem) * 1.026), 3rem);--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--font-family--system-font: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, 'Helvetica Neue', sans-serif;--wp--preset--font-family--albura: Albura;--wp--preset--font-family--albura-light: Albura Light;--wp--preset--font-family--albura-semibold: Albura SemiBold;--wp--preset--font-family--baloo-2: "Baloo 2", system-ui;--wp--preset--font-family--recursive: Recursive, sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:root { --wp--style--global--content-size: 620px;--wp--style--global--wide-size: 1100px; }:where(body) { margin: 0; }.wp-site-blocks { padding-top: var(--wp--style--root--padding-top); padding-bottom: var(--wp--style--root--padding-bottom); }.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) { padding-right: 0; padding-left: 0; }.has-global-padding :where(:not(.alignfull.is-layout-flow) > .has-global-padding:not(.wp-block-block, .alignfull)) > .alignfull { margin-left: 0; margin-right: 0; }.wp-site-blocks > .alignleft { float: left; margin-right: 2em; }.wp-site-blocks > .alignright { float: right; margin-left: 2em; }.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }:where(.wp-site-blocks) > * { margin-block-start: 1.5rem; margin-block-end: 0; }:where(.wp-site-blocks) > :first-child { margin-block-start: 0; }:where(.wp-site-blocks) > :last-child { margin-block-end: 0; }:root { --wp--style--block-gap: 1.5rem; }:root :where(.is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.is-layout-flow) > *{margin-block-start: 1.5rem;margin-block-end: 0;}:root :where(.is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.is-layout-constrained) > *{margin-block-start: 1.5rem;margin-block-end: 0;}:root :where(.is-layout-flex){gap: 1.5rem;}:root :where(.is-layout-grid){gap: 1.5rem;}.is-layout-flow > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-flow > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-flow > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignleft{float: left;margin-inline-start: 0;margin-inline-end: 2em;}.is-layout-constrained > .alignright{float: right;margin-inline-start: 2em;margin-inline-end: 0;}.is-layout-constrained > .aligncenter{margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > :where(:not(.alignleft):not(.alignright):not(.alignfull)){max-width: var(--wp--style--global--content-size);margin-left: auto !important;margin-right: auto !important;}.is-layout-constrained > .alignwide{max-width: var(--wp--style--global--wide-size);}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{background-color: var(--wp--preset--color--background);color: var(--wp--preset--color--foreground);font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--medium);line-height: 1.6;--wp--style--root--padding-top: 7rem;--wp--style--root--padding-right: var(--wp--preset--spacing--50);--wp--style--root--padding-bottom: 7rem;--wp--style--root--padding-left: var(--wp--preset--spacing--50);}a:where(:not(.wp-element-button)){color: var(--wp--preset--color--primary);font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--medium);}:root :where(a:where(:not(.wp-element-button)):hover){text-decoration: none;}h1, h2, h3, h4, h5, h6{font-family: var(--wp--preset--font-family--baloo-2);font-style: normal;font-weight: 400;line-height: 1.125;}h1{font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--x-large);}h2{font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--large);}h3{font-family: var(--wp--preset--font-family--baloo-2);font-size: clamp(1.5rem, calc(1.5rem + ((1vw - 0.48rem) * 0.4808)), 1.75rem);}h4{font-family: var(--wp--preset--font-family--baloo-2);font-size: clamp(1.25rem, calc(1.25rem + ((1vw - 0.48rem) * 0.4808)), 1.5rem);}h5{font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--medium);}h6{font-family: var(--wp--preset--font-family--baloo-2);font-size: var(--wp--preset--font-size--small);}:root :where(.wp-element-button, .wp-block-button__link){background-color: var(--wp--preset--color--primary);border-radius: 0.25rem;border-width: 0;color: var(--wp--preset--color--background);font-family: var(--wp--preset--font-family--baloo-2);font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}:root :where(.wp-element-button:hover, .wp-block-button__link:hover){background-color: var(--wp--preset--color--secondary);color: var(--wp--preset--color--background);}:root :where(.wp-element-button:focus, .wp-block-button__link:focus){background-color: var(--wp--preset--color--primary);color: var(--wp--preset--color--background);outline-color: var(--wp--preset--color--primary);outline-offset: 2px;outline-style: dotted;outline-width: 1px;}:root :where(.wp-element-button:active, .wp-block-button__link:active){background-color: var(--wp--preset--color--primary);color: var(--wp--preset--color--background);}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-color{color: var(--wp--preset--color--primary) !important;}.has-secondary-color{color: var(--wp--preset--color--secondary) !important;}.has-foreground-color{color: var(--wp--preset--color--foreground) !important;}.has-background-color{color: var(--wp--preset--color--background) !important;}.has-tertiary-color{color: var(--wp--preset--color--tertiary) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-background-color{background-color: var(--wp--preset--color--primary) !important;}.has-secondary-background-color{background-color: var(--wp--preset--color--secondary) !important;}.has-foreground-background-color{background-color: var(--wp--preset--color--foreground) !important;}.has-background-background-color{background-color: var(--wp--preset--color--background) !important;}.has-tertiary-background-color{background-color: var(--wp--preset--color--tertiary) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-primary-border-color{border-color: var(--wp--preset--color--primary) !important;}.has-secondary-border-color{border-color: var(--wp--preset--color--secondary) !important;}.has-foreground-border-color{border-color: var(--wp--preset--color--foreground) !important;}.has-background-border-color{border-color: var(--wp--preset--color--background) !important;}.has-tertiary-border-color{border-color: var(--wp--preset--color--tertiary) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;}.has-system-font-font-family{font-family: var(--wp--preset--font-family--system-font) !important;}.has-albura-font-family{font-family: var(--wp--preset--font-family--albura) !important;}.has-albura-light-font-family{font-family: var(--wp--preset--font-family--albura-light) !important;}.has-albura-semibold-font-family{font-family: var(--wp--preset--font-family--albura-semibold) !important;}.has-baloo-2-font-family{font-family: var(--wp--preset--font-family--baloo-2) !important;}.has-recursive-font-family{font-family: var(--wp--preset--font-family--recursive) !important;}/* IgnoreThemeCustomCSS */
input {
font-family: "Baloo 2"
}
.enlighter-default {
font-family: "Recursive", "Source Code Pro", "Liberation Mono", "Courier New", Courier, monospace;
/* set variation axis values */
--mono: "MONO" 1;
/* Monospace: Sans (natural-width) or Mono (fixed-width) */
--casl: "CASL" 1;
/* Casual: Linear to Casual */
--wght: "wght" 650;
/* Weight: Light to ExtraBlack; usually set with `font-weight` */
--slnt: "slnt" -15;
/* Slant: 0 to -15 degrees, auto cursive at -14 */
--CRSV: "CRSV" 1;
/* Cursive: always roman, auto substitution, or always cursive */
/* apply axis values with CSS custom properties */
font-variation-settings: var(--mono), var(--casl), var(--wght), var(--slnt), var(--CRSV);
}
.my-underline-only-on-hover-a-tag {
text-decoration: none;
}
.my-underline-only-on-hover-a-tag:hover {
text-decoration: underline;
}
:root :where(.wp-block-list){padding-left: var(--wp--preset--spacing--70);}
:root :where(p){font-size: clamp(0.957rem, 0.957rem + ((1vw - 0.2rem) * 1.011), 1.45rem);letter-spacing: 0em;line-height: 1.4;text-transform: none;}
:root :where(.wp-block-post-content){text-transform: none;}
:root :where(.wp-block-post-date){color: var(--wp--preset--color--foreground);font-size: var(--wp--preset--font-size--small);}
:root :where(.wp-block-post-date a:where(:not(.wp-element-button))){text-decoration: none;}
:root :where(.wp-block-post-date a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
:root :where(.wp-block-post-navigation-link){font-size: clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.051), 0.9rem);letter-spacing: 0.04em;text-transform: uppercase;}
:root :where(.wp-block-post-title){font-family: var(--wp--preset--font-family--albura-semibold);margin-bottom: 0;}
:root :where(.wp-block-post-title a:where(:not(.wp-element-button))){text-decoration: none;}
:root :where(.wp-block-post-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}
/*# sourceURL=global-styles-inline-css */
</style>
<style id="core-block-supports-inline-css">
.wp-container-core-group-is-layout-4656884f > *{margin-block-start:0;margin-block-end:0;}.wp-container-core-group-is-layout-4656884f > * + *{margin-block-start:2px;margin-block-end:0;}.wp-container-core-group-is-layout-1ccc30ea{gap:20px;flex-direction:column;align-items:flex-start;}.wp-container-core-group-is-layout-08aa00d2{flex-wrap:nowrap;gap:10px;}.wp-container-core-columns-is-layout-a8dc44b9{flex-wrap:nowrap;gap:40px 40px;}.wp-container-core-group-is-layout-f56f613f{flex-wrap:nowrap;}
/*# sourceURL=core-block-supports-inline-css */
</style>
<style id="jetpack-stats-inline-css">
img#wpstats{display:none}
/*# sourceURL=jetpack-stats-inline-css */
</style>
<link rel='stylesheet' id='all-css-e19d3dcbb8c750460ec275119c30cf9f' href='https://blog.eightnoteight.dev/_static/??wp-content/themes/bibliophile/style.css,wp-content/plugins/jetpack/modules/comments/subscription-modal-on-comment/subscription-modal.css?m=1764003632' type='text/css' media='all' />
<style id="jetpack_likes-inline-css">
#jp-post-flair{padding-top:.5em}#content div.sharedaddy,#main div.sharedaddy,div.sharedaddy{clear:both}div.sharedaddy h3.sd-title{display:inline-block;font-size:9pt;font-weight:700;line-height:1.2;margin:0 0 1em}div.sharedaddy h3.sd-title:before{border-top:1px solid #dcdcde;content:"";display:block;margin-bottom:1em;min-width:30px;width:100%}div.jetpack-likes-widget-wrapper{min-height:50px;position:relative;width:100%}div.jetpack-likes-widget-wrapper .sd-link-color{font-size:12px}div.jetpack-comment-likes-widget-wrapper{min-height:31px;position:relative;width:100%}div.jetpack-comment-likes-widget-wrapper iframe{margin-bottom:0}#likes-other-gravatars{background-color:#fff;border:1px solid #dcdcde;border-radius:4px;box-shadow:none;display:none;height:auto;max-height:240px;min-width:220px;overflow:auto;padding:9px 12px 10px;position:absolute;z-index:1000}#likes-other-gravatars *{line-height:normal}#likes-other-gravatars .likes-text{color:#101517;font-size:12px;font-weight:500;padding-bottom:8px}#likes-other-gravatars :is(li,ul){list-style-type:none;margin:0;padding:0;text-indent:0}#likes-other-gravatars li:before{content:""}#likes-other-gravatars ul.wpl-avatars{display:block;max-height:190px;overflow:auto}#likes-other-gravatars ul.wpl-avatars li{float:none;height:28px;margin:0 0 4px;width:196px}#likes-other-gravatars ul.wpl-avatars li a{align-items:center;border-bottom:none!important;display:flex;gap:8px;margin:0 2px 0 0;text-decoration:none}#likes-other-gravatars ul.wpl-avatars li a span{color:#2c3338;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}#likes-other-gravatars ul.wpl-avatars li a img{background:none;border:none;border-radius:50%;box-sizing:border-box;margin:0!important;padding:1px!important;position:static}div.sd-box{border-top:1px solid #00000021}.jetpack-likes-widget-loaded iframe,.jetpack-likes-widget-loading .likes-widget-placeholder,.jetpack-likes-widget-unloaded .likes-widget-placeholder{display:block}.jetpack-likes-widget-loaded .likes-widget-placeholder,.jetpack-likes-widget-loading iframe,.jetpack-likes-widget-unloaded iframe{display:none}.comment-likes-widget,.entry-content .post-likes-widget,.post-likes-widget{border-width:0;margin:0}.comment-likes-widget-placeholder,.post-likes-widget-placeholder{border-width:0;margin:0;position:relative}.comment-likes-widget-placeholder{display:flex;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;height:18px;position:absolute}.comment-likes-widget-placeholder:before{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0z'/%3E%3Cpath fill='%232ea2cc' d='m12 2 2.582 6.953L22 9.257l-5.822 4.602L18.18 21 12 16.89 5.82 21l2.002-7.14L2 9.256l7.418-.304'/%3E%3C/svg%3E");background-repeat:no-repeat;background-size:16px 16px;color:#2ea2cc;content:"";display:inline-block;height:16px;padding-right:5px;position:relative;top:3px;width:16px}.post-likes-widget-placeholder .button{display:none}:is(.comment-likes-widget-placeholder,.post-likes-widget-placeholder) .loading{color:#999;font-size:12px}.comment-likes-widget-placeholder .loading{align-self:center;color:#4e4e4e;margin-top:4px;padding-left:5px}div.sharedaddy.sd-like-enabled .sd-like h3{display:none}div.sharedaddy.sd-like-enabled .sd-like .post-likes-widget{float:none;position:absolute;top:0;width:100%}.comment-likes-widget{width:100%}.cs-rating,.pd-rating{display:block!important}.sd-gplus .sd-title{display:none}@media print{.jetpack-likes-widget-wrapper{display:none}}
/*# sourceURL=https://blog.eightnoteight.dev/wp-content/plugins/jetpack/_inc/build/likes/style.min.css */
</style>
<link rel='stylesheet' id='all-css-5c27252e430688ea3c76383c86d2fdaf' href='https://blog.eightnoteight.dev/wp-content/plugins/enlighter/cache/enlighterjs.min.css?m=1776096969' type='text/css' media='all' />
<style id="jetpack-global-styles-frontend-style-inline-css">
:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */
</style>
<link rel='stylesheet' id='all-css-f621c6a5733952fccb808cbb52a9d217' href='https://blog.eightnoteight.dev/_static/??wp-content/plugins/jetpack/modules/sharedaddy/sharing.css,wp-content/plugins/jetpack/_inc/build/social-logos/social-logos.css?m=1784576016' type='text/css' media='all' />
<script id="jetpack-blocks-assets-base-url-js-before">
var Jetpack_Block_Assets_Base_Url="https://blog.eightnoteight.dev/wp-content/plugins/jetpack/_inc/blocks/";
//# sourceURL=jetpack-blocks-assets-base-url-js-before
</script>
<script id="jetpack-mu-wpcom-settings-js-before">
var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://blog.eightnoteight.dev/wp-content/mu-plugins/wpcomsh/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"};
//# sourceURL=jetpack-mu-wpcom-settings-js-before
</script>
<link rel="https://api.w.org/" href="https://blog.eightnoteight.dev/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://blog.eightnoteight.dev/wp-json/wp/v2/posts/105123576" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://blog.eightnoteight.dev/xmlrpc.php?rsd" />
<link rel="canonical" href="https://blog.eightnoteight.dev/2023/02/26/health-checking/" />
<link rel='shortlink' href='https://wp.me/pg8Llz-775ry' />
<meta name="description" content="Systems could fail due to several unexpected failures, degraded hardware suddenly showing higher latency, partial network disruption to some specific instances, or network cable cut-off etc.,… Health checking, in principle, handles such unexpected localised failures that happen to particular containers or VMs among the entire cluster by removing them from the workload. This way total&hellip;" />
<!-- Jetpack Open Graph Tags -->
<meta property="og:type" content="article" />
<meta property="og:title" content="Health Checking" />
<meta property="og:url" content="https://blog.eightnoteight.dev/2023/02/26/health-checking/" />
<meta property="og:description" content="Systems could fail due to several unexpected failures, degraded hardware suddenly showing higher latency, partial network disruption to some specific instances, or network cable cut-off etc.,… Heal…" />
<meta property="article:published_time" content="2023-02-26T01:32:06+00:00" />
<meta property="article:modified_time" content="2024-11-03T09:54:41+00:00" />
<meta property="og:site_name" content="Srinivas Devaki" />
<meta property="og:image" content="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/4e95a-0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png?fit=1200%2C686&#038;ssl=1" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="686" />
<meta property="og:image:alt" content="" />
<meta property="og:locale" content="en_GB" />
<meta name="twitter:site" content="@eightnoteight" />
<meta name="twitter:text:title" content="Health Checking" />
<meta name="twitter:image" content="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/4e95a-0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png?fit=1200%2C686&#038;ssl=1&#038;w=640" />
<meta name="twitter:card" content="summary_large_image" />
<!-- End Jetpack Open Graph Tags -->
<style class="wp-fonts-local">
@font-face{font-family:"Albura SemiBold";font-style:normal;font-weight:545;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/themes/bibliophile/assets/fonts/albura-semibold_normal_545.otf') format('opentype');}
@font-face{font-family:"Albura SemiBold";font-style:italic;font-weight:541;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/themes/bibliophile/assets/fonts/albura-semibold_italic_541.otf') format('opentype');}
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:400;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/uploads/fonts/wXK0E3kTposypRydzVT08TS3JnAmtdgazapq9Fat7WcN.woff2') format('woff2');}
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:500;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/uploads/fonts/wXK0E3kTposypRydzVT08TS3JnAmtdgozapq9Fat7WcN.woff2') format('woff2');}
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:600;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/uploads/fonts/wXK0E3kTposypRydzVT08TS3JnAmtdjEyqpq9Fat7WcN.woff2') format('woff2');}
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:700;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/uploads/fonts/wXK0E3kTposypRydzVT08TS3JnAmtdj9yqpq9Fat7WcN.woff2') format('woff2');}
@font-face{font-family:"Baloo 2";font-style:normal;font-weight:800;font-display:fallback;src:url('https://blog.eightnoteight.dev/wp-content/uploads/fonts/wXK0E3kTposypRydzVT08TS3JnAmtdiayqpq9Fat7WcN.woff2') format('woff2');}
</style>
<link rel="icon" href="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/1725873733250.jpeg?fit=32%2C32&#038;ssl=1" sizes="32x32" />
<link rel="icon" href="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/1725873733250.jpeg?fit=192%2C192&#038;ssl=1" sizes="192x192" />
<link rel="apple-touch-icon" href="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/1725873733250.jpeg?fit=180%2C180&#038;ssl=1" />
<meta name="msapplication-TileImage" content="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/1725873733250.jpeg?fit=270%2C270&#038;ssl=1" />
</head>
<body class="wp-singular post-template-default single single-post postid-105123576 single-format-standard wp-custom-logo wp-embed-responsive wp-theme-bibliophile is-block-theme">
<script id='jetpack-search-theme-token-sampler'>(function(){try{var c=getComputedStyle(document.body),r=document.documentElement,ink=c.color,bg=c.backgroundColor;if(ink){r.style.setProperty('--jp-search-page-ink',ink);}if(bg&&bg!==ink&&bg!=='rgba(0, 0, 0, 0)'&&bg!=='transparent'){r.style.setProperty('--jp-search-page-surface',bg);}}catch(e){}})();</script>
<div class="wp-site-blocks">
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-columns alignwide is-layout-flex wp-container-core-columns-is-layout-a8dc44b9 wp-block-columns-is-layout-flex">
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:20%">
<div class="wp-block-group has-global-padding is-layout-constrained wp-container-core-group-is-layout-4656884f wp-block-group-is-layout-constrained">
<h3 class="wp-block-heading">Links:</h3>
<div style="height:12px" aria-hidden="true" class="wp-block-spacer"></div>
<h5 class="wp-block-heading"><a href="/">Home</a></h5>
<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>
<h5 class="wp-block-heading"><a href="https://blog.eightnoteight.dev/talks/" data-type="page" data-id="137000660">Talks</a></h5>
<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>
<h5 class="wp-block-heading"><a href="https://blog.eightnoteight.dev/pithy-quotes/" data-type="page" data-id="137000806">Pithy Quotes</a></h5>
<div style="height:10px" aria-hidden="true" class="wp-block-spacer"></div>
<h5 class="wp-block-heading"><a href="https://blog.eightnoteight.dev/feed/" data-type="link" data-id="https://blog.eightnoteight.dev/feed/">RSS </a><a href="https://blog.eightnoteight.dev/feed/" data-type="link" data-id="https://blog.eightnoteight.dev/feed/" target="_blank" rel="noreferrer noopener">Feed</a></h5>
</div>
</div>
<div class="wp-block-column is-layout-flow wp-block-column-is-layout-flow" style="flex-basis:66.66%">
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-1ccc30ea wp-block-group-is-layout-flex"><figure class="wp-block-post-featured-image"><img width="1568" height="896" src="https://blog.eightnoteight.dev/wp-content/uploads/2024/10/4e95a-0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png" class="attachment-post-thumbnail size-post-thumbnail wp-post-image" alt="" style="object-fit:cover;" decoding="async" fetchpriority="high" data-attachment-id="137000456" data-permalink="https://blog.eightnoteight.dev/0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896-png/" data-orig-file="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/4e95a-0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png?fit=1568%2C896&amp;ssl=1" data-orig-size="1568,896" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/blog.eightnoteight.dev/wp-content/uploads/2024/10/4e95a-0f8a3d75-d7fa-46f7-8f6d-21625e782dac_1568x896.png?fit=1024%2C585&amp;ssl=1" /></figure>
<h2 style="font-style:normal;font-weight:400;text-transform:none" class="wp-block-post-title has-baloo-2-font-family">Health Checking</h2>
<div class="wp-block-template-part"><div class="wp-block-post-date"><time datetime="2023-02-26T01:32:06+05:30">26th February 2023</time></div></div></div>
<div style="height:5px" aria-hidden="true" class="wp-block-spacer"></div>
<div class="entry-content wp-block-post-content is-layout-flow wp-block-post-content-is-layout-flow">
<p class="wp-block-paragraph"></p>
<p class="has-medium-font-size wp-block-paragraph">Systems could fail due to several unexpected failures, degraded hardware suddenly showing higher latency, partial network disruption to some specific instances, or network cable cut-off etc.,… Health checking, in principle, handles such unexpected localised failures that happen to particular containers or VMs among the entire cluster by removing them from the workload. This way total error rate in the cluster can be reduced.</p>
<p class="has-medium-font-size wp-block-paragraph">In production, there are several such localised failures</p>
<ul class="wp-block-list has-medium-font-size">
<li>The network layer of some specific server racks got degraded, increasing the TCP retransmissions rate and increasing latencies</li>
<li class="has-medium-font-size">Software faults cause a few nodes in the cluster to get stuck</li>
<li>Threads got stuck in a deadlock</li>
<li>A critical dependency is failing, for example, unable to connect to a database or unable to connect to an upstream service.</li>
<li>Disk failure</li>
<li>The HTTP server process crashed, but the container or VM is still running</li>
<li>A critical background thread crashed; for example, an async kafka producer might be pushing data to kafka in a background thread, and that thread got crashed for some reason, or a local cache invalidation background thread crashed</li>
<li>Working on stale data, for example, in a control plane &amp; data plane architecture, the disruption in the communication could make the data plane work on very stale data</li>
<li>A critical process or a sidecar crashed</li>
</ul>
<p class="has-medium-font-size wp-block-paragraph">For all such failures, we could do health checking for all pods in a cluster and remove them from the workload. While such a mechanism of health checking solves some failure modes, it inevitably introduces many other failure modes as well into the system.</p>
<h3 class="wp-block-heading">Cascading Outages due to Dependencies</h3>
<p class="has-medium-font-size wp-block-paragraph">While this solves the localised failures, some failures are not completely local. For example, suppose a critical dependency starts failing, and we start removing the pods from the cluster. In that case, the load on the rest of the pods keeps increasing, further aggravating the situation and leading to a cascading outage on downstream services as well.</p>
<h4 class="wp-block-heading">Fail Open on All Pods being Unhealthy</h4>
<p class="has-medium-font-size wp-block-paragraph">To avoid such cascading outages, AWS ALB implements a <a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html#:~:text=the%20load%20balancer%20fails%20open">Fail open technique</a> where if all pods of a cluster start reporting unhealthy at the same time, then ALB would start ignoring the health checks and drive traffic to all the hosts just as in a steady state.</p>
<h3 class="wp-block-heading">Load-based Cascading Outages</h3>
<p class="has-medium-font-size wp-block-paragraph">But upstream dependency-based health check failure is not the only reason why a health check could be failing; in languages like python, ruby and PHP, a web server is equipped with a fixed number of threads, and this number is pre-tuned according to resources(vcpu &amp; memory) allocated to a single container. But in production, the conditions change very fast; for example, an upstream latency suddenly started increasing, or a notification campaign went live, and suddenly a lot of customers are trying to buy that fancy hat you are selling, or your competitor is facing a blackout and customers started coming on to your site at once.</p>
<p class="has-medium-font-size wp-block-paragraph">For all such scenarios, all the threads in your server would be very busy, excess requests would start getting dropped, and some could even be health checks. In such a case, if ALB starts removing even some of the hosts, the load on the rest of the hosts will increase further, leading to more load than the cluster can handle. Here the outage is leading to a cascading effect due to an issue within the cluster rather than an upstream service. Since this is a load-based issue, as the load balancer removes nodes, they immediately become healthy as the load is reduced, but the loop continues, i.e. as soon they are put into the pool, they start failing health checks. So the Fail Open only when all pods are unhealthy is not a good solution for such load-based health check failures.</p>
<h4 class="wp-block-heading">Healthy Panic Threshold</h4>
<p class="has-medium-font-size wp-block-paragraph">Envoy solves this problem by using a <a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/load_balancing/panic_threshold">panic threshold</a>, i.e. if more than 50% of the hosts are unhealthy, then simply send traffic to healthy and unhealthy containers. However, the threshold might need some tuning according to your auto-scaling threshold.</p>
<p class="has-medium-font-size wp-block-paragraph">This is an excellent solution for such load-based cascading outages. Let&#8217;s say the panic threshold is at <code>30%</code>, then the cluster can remove unhealthy members up to <code>30%</code> and in which case the load only increases by <code>42.8%</code> on the rest of them <code>((100/70) * 30)</code>. This would solve both the localised failures scenario and would solve cascading outages.</p>
<p class="has-medium-font-size wp-block-paragraph">This would require some fine-tuning and maintenance, though, i.e. choosing a threshold according to your min count set in autoscaling, ensuring to remove the unhealthy nodes by the orchestrator(or by a human) so that future health check failures can be handled gracefully and removed from the cluster.</p>
<h4 class="wp-block-heading">Prioritising Health Check Requests</h4>
<p class="has-medium-font-size wp-block-paragraph">In case a healthy panic threshold is not implemented like in ALB, One other solution to such load-based outages is to prioritise health-checking requests above all other requests. since health-checking requests are often lightweight, it won’t be taking resources away from the actual requests that contribute to the availability of your service.</p>
<p class="has-medium-font-size wp-block-paragraph">Haproxy offers this via the <code>set-priority-class</code>(<a href="https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#4.2-http-request">https://cbonte.github.io/haproxy-dconv/1.9/configuration.html#4.2-http-request</a> set-priority-class) option for HTTP requests, using this, we can drive higher priority to health check requests and thus avoid health check failures during high load scenarios.</p>
<p class="has-medium-font-size wp-block-paragraph">Although such request-based prioritisation feature is not available with other proxies like nginx &amp; envoy(<a href="https://github.com/envoyproxy/envoy/issues/25783">https://github.com/envoyproxy/envoy/issues/25783</a>)</p>
<p class="has-medium-font-size wp-block-paragraph">Coming back to fixed thread pool languages like PHP, python and ruby, in some cases, the thread could get stuck on a very slow upstream and a timeout is not set, or the thread could get into a deadlock. Because of the fixed size of the pool, such issues could quickly choke the entire pool and start failing actual requests and health-checking requests equally. In such cases prioritising health check requests won’t help much because all threads are stuck. For such cases, we need to implement a thread killer that kills off threads that got stuck for a long time (5-10 seconds), though it may not help in all scenarios as it depends on the inflow of such requests which go into the stuck state.</p>
<h3 class="wp-block-heading">Dedicated Threadpool for Healthcheck Requests</h3>
<p class="has-medium-font-size wp-block-paragraph">One solution would be to separate the thread pool for health checking and main requests. Most frameworks like apache+php, nginx+php-fpm, nginx+passenger+ruby, and nginx+gunicorn+python offer a way to have dedicated thread pools and route requests based on the URL to the corresponding thread pool.</p>
<p class="has-medium-font-size wp-block-paragraph">The only disadvantage is that threads are costly in some languages like python and ruby, where each thread consumes a lot of memory, and it would be expensive to have a separate thread pool just for health checks. While a smaller thread pool would be enough for health checks during load-based issues where the CPU is high, it may not be enough to ensure that health check requests would always pass.</p>
<p class="has-medium-font-size wp-block-paragraph">Each solution could help avoid cascading outages due to the load, but each comes with some caveat, or the feature is unavailable for your production setup.</p>
<h3 class="wp-block-heading">Cost of Point to Point Health checking</h3>
<p class="has-medium-font-size wp-block-paragraph">Most envoy-based service meshes implement a point-to-point health-checking system, which means for a small service, a big downstream could generate more health-checking workload than the actual workload. This, in turn, could increase the total infrastructure cost unnecessarily.</p>
<p class="has-medium-font-size wp-block-paragraph">To solve this, envoy provides a way to <a href="https://www.envoyproxy.io/docs/envoy/latest/intro/arch_overview/upstream/health_checking#http-health-checking-filter">cache these health checks within envoy</a>, but currently, this is <a href="https://github.com/envoyproxy/envoy/issues/2898">not supported for grpc</a>. In any case, allocating enough vCPU to such a small service ensures that autoscaling doesn’t keep scaling up the containers because of the health-checking traffic.</p>
<h3 class="wp-block-heading">Deep Health Checking</h3>
<p class="has-medium-font-size wp-block-paragraph">As mentioned at the top of the article, there are many failure modes for the pods and adding each of these failure modes into health checking is a very tempting solution to implement. While deep health-checking solves the localised failures, cluster-wide failures also lead to painful cascading outages. Such deep health checking must be balanced with necessary central safeguards to ensure that not all or a significant number of cluster pods are removed immediately.</p>
<p class="has-medium-font-size wp-block-paragraph">for example</p>
<ul class="wp-block-list">
<li>ECS scheduler doesn’t have a Fail open or panic threshold logic, so if an essential container in all tasks becomes unhealthy, it will stop all the ecs tasks and, even worse, stop new tasks from becoming part of the cluster / ALB</li>
<li>Kubernetes removes all pods that fail readiness probes and doesn’t have a Fail open or panic threshold functionality</li>
<li>An ASG with a custom health check could mark all hosts as unhealthy at once and go into a cascading outage</li>
</ul>
<p class="has-medium-font-size wp-block-paragraph">since most orchestrators and load balancers lack features like fail open and healthy panic threshold, we should be careful around the depth of health-checking logic and refrain when the corresponding safeguard feature is unavailable.</p>
<h3 class="wp-block-heading">Startup vs Runtime Health checks</h3>
<p class="has-medium-font-size wp-block-paragraph">Setting a deep health check, like being connected to a database, is risky because of the lack of panic threshold features in load balancing. Still, there are a decent number of failure modes that, if failed during the startup, have no chance of recovering during runtime.</p>
<p class="has-medium-font-size wp-block-paragraph">For example, if a container fails to get the configuration or is not connected to a critical dependent, it most certainly would return errors for all the requests. One could wait until all dependencies are satisfied, but for how long? should there be a timeout for such waiting logic, and if there is, should the ecs task stop or start accepting requests and failing them until the dependencies recover in the background?</p>
<p class="has-medium-font-size wp-block-paragraph">Such startup health checks are really useful when deploying incorrect configurations like incorrect port number for the database, incorrect host for a redis, a new MySQL slave whose security group is not whitelisted etc.</p>
<p class="has-medium-font-size wp-block-paragraph">While deep runtime health checks are very risky, the risk of such deep checks is somewhat less for startup health checking but not completely non-existent. A very deep startup health check, like checking upstream microservice dependency, might cause a cascading outage where the scale-up of microservice stops due to an upstream service outage. However, a slightly deep startup health check, like being connected to a database, is still a contained dependency within that microservice while helping to avoid some issues.</p>
<h3 class="wp-block-heading">Observability Costs of Point-to-Point Health checking</h3>
<p class="has-medium-font-size wp-block-paragraph">Because the volume of point-to-point health checking would be very high, it also costs a lot to build observability around it. And so, it is easy to remove observability for health checking, but it’s also very dangerous as it would make the health check failures much harder to solve.</p>
<p class="has-medium-font-size wp-block-paragraph">For example, we won’t be able to debug health check timeouts properly if we can’t find the latency of health checks during a steady state. If health checking is removed from APM, it would be hard to see the distribution of latency among each of the components involved in health checking.</p>
<p class="has-medium-font-size wp-block-paragraph">In such cases, sampling is a very good solution to recording steady-state behaviour that would be useful during health check failure scenarios.</p>
<div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-x"><a rel="nofollow noopener noreferrer"
data-shared="sharing-x-105123576"
class="share-x sd-button share-icon"
href="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=x"
target="_blank"
aria-labelledby="sharing-x-105123576"
>
<span id="sharing-x-105123576" hidden>Share on X (Opens in new window)</span>
<span>X</span>
</a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer"
data-shared="sharing-linkedin-105123576"
class="share-linkedin sd-button share-icon"
href="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=linkedin"
target="_blank"
aria-labelledby="sharing-linkedin-105123576"
>
<span id="sharing-linkedin-105123576" hidden>Share on LinkedIn (Opens in new window)</span>
<span>LinkedIn</span>
</a></li><li class="share-threads"><a rel="nofollow noopener noreferrer"
data-shared="sharing-threads-105123576"
class="share-threads sd-button share-icon"
href="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=threads"
target="_blank"
aria-labelledby="sharing-threads-105123576"
>
<span id="sharing-threads-105123576" hidden>Share on Threads (Opens in new window)</span>
<span>Threads</span>
</a></li><li class="share-reddit"><a rel="nofollow noopener noreferrer"
data-shared="sharing-reddit-105123576"
class="share-reddit sd-button share-icon"
href="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=reddit"
target="_blank"
aria-labelledby="sharing-reddit-105123576"
>
<span id="sharing-reddit-105123576" hidden>Share on Reddit (Opens in new window)</span>
<span>Reddit</span>
</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
data-shared="sharing-facebook-105123576"
class="share-facebook sd-button share-icon"
href="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=facebook"
target="_blank"
aria-labelledby="sharing-facebook-105123576"
>
<span id="sharing-facebook-105123576" hidden>Share on Facebook (Opens in new window)</span>
<span>Facebook</span>
</a></li><li class="share-email"><a rel="nofollow noopener noreferrer"
data-shared="sharing-email-105123576"
class="share-email sd-button share-icon"
href="mailto:?subject=%5BShared%20Post%5D%20Health%20Checking&#038;body=https%3A%2F%2Fblog.eightnoteight.dev%2F2023%2F02%2F26%2Fhealth-checking%2F&#038;share=email"
target="_blank"
aria-labelledby="sharing-email-105123576"
data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="0ffd1fac0a" data-email-share-track-url="https://blog.eightnoteight.dev/2023/02/26/health-checking/?share=email">
<span id="sharing-email-105123576" hidden>Email a link to a friend (Opens in new window)</span>
<span>Email</span>
</a></li><li class="share-end"></li></ul></div></div></div></div>
<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>
<div class="wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-08aa00d2 wp-block-group-is-layout-flex"><div class="post-navigation-link-next wp-block-post-navigation-link"><a href="https://blog.eightnoteight.dev/2023/08/14/go-121/" rel="next">Go 1.21</a><span class="wp-block-post-navigation-link__arrow-next is-arrow-chevron" aria-hidden="true">»</span></div></div>
<div style="height:30px" aria-hidden="true" class="wp-block-spacer"></div>
<div class="wp-block-jetpack-subscriptions__supports-newline wp-block-jetpack-subscriptions">
<div class="wp-block-jetpack-subscriptions__container is-not-subscriber">
<form
action="https://wordpress.com/email-subscriptions"
method="post"
accept-charset="utf-8"
data-blog="238510005"
data-post_access_level="everybody"
data-subscriber_email=""
id="subscribe-blog"
>
<div class="wp-block-jetpack-subscriptions__form-elements">
<p id="subscribe-email">
<label
id="subscribe-field-label"
for="subscribe-field"
class="screen-reader-text"
>
Type your email… </label>
<input
required="required"
type="email"
name="email"
autocomplete="email"
class="no-border-radius "
style="font-size: 16px;padding: 15px 23px 15px 23px;border-radius: 0px;border-width: 1px;"
placeholder="Type your email…"
value=""
id="subscribe-field"
title="Please fill in this field."
/> </p>
<p id="subscribe-submit"
>
<input type="hidden" name="action" value="subscribe"/>
<input type="hidden" name="blog_id" value="238510005"/>
<input type="hidden" name="source" value="https://blog.eightnoteight.dev/2023/02/26/health-checking/"/>
<input type="hidden" name="sub-type" value="subscribe-block"/>
<input type="hidden" name="app_source" value=""/>
<input type="hidden" name="redirect_fragment" value="subscribe-blog"/>
<input type="hidden" name="lang" value="en_GB"/>
<input type="hidden" id="_wpnonce" name="_wpnonce" value="9a1bc89944" /><input type="hidden" name="_wp_http_referer" value="/2023/02/26/health-checking/" /><input type="hidden" name="post_id" value="105123576"/> <button type="submit"
class="wp-block-button__link no-border-radius"
style="font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-radius: 0px;border-width: 1px;"
name="jetpack_subscriptions_widget"
>
Subscribe </button>
</p>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<footer class="alignwide wp-block-template-part">
<div style="height:var(--wp--preset--spacing--80)" aria-hidden="true" class="wp-block-spacer"></div>
<div class="wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained">
<div class="wp-block-group alignwide is-nowrap is-layout-flex wp-container-core-group-is-layout-f56f613f wp-block-group-is-layout-flex"></div>
</div>
<div style="height:var(--wp--preset--spacing--80)" aria-hidden="true" class="wp-block-spacer"></div>
</footer></div>
</div>
<!-- wpcom_wp_footer -->
<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/bibliophile/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<meta id="bilmur" property="bilmur:data" content="" data-customproperties="{&quot;woo_active&quot;:&quot;0&quot;,&quot;logged_in&quot;:&quot;0&quot;,&quot;wptheme&quot;:&quot;bibliophile&quot;,&quot;wptheme_is_block&quot;:&quot;1&quot;}" data-provider="wordpress.com" data-service="atomic" data-site-tz="Asia/Kolkata" >
<script defer src="https://s0.wp.com/wp-content/js/bilmur.min.js?m=202637"></script>
<div class="jetpack-subscription-modal">
<div class="jetpack-subscription-modal__modal-content">
<div class="wp-block-group has-border-color jetpack-subscription-modal__modal-content-form is-layout-flow wp-block-group-is-layout-flow" style="border-color:#dddddd;border-width:1px;margin-top:0;margin-bottom:0;padding:32px">
<h2 class="wp-block-heading has-text-align-center" style="margin-top:4px;margin-bottom:10px;font-size:clamp(16.834px, 1.052rem + ((1vw - 3.2px) * 1.175), 26px);font-style:normal;font-weight:600">Discover more from Srinivas Devaki</h2>
<p class="has-text-align-center wp-block-paragraph" style='margin-top:4px;margin-bottom:0px;font-size:clamp(14px, 0.875rem + ((1vw - 3.2px) * 0.128), 15px);'>Subscribe now to keep reading and get access to the full archive.</p>
<div class="wp-block-jetpack-subscriptions__supports-newline is-style-compact wp-block-jetpack-subscriptions">
<div class="wp-block-jetpack-subscriptions__container is-not-subscriber">
<form
action="https://wordpress.com/email-subscriptions"
method="post"
accept-charset="utf-8"
data-blog="238510005"
data-post_access_level="everybody"
data-subscriber_email=""
id="subscribe-blog-2"
>
<div class="wp-block-jetpack-subscriptions__form-elements">
<p id="subscribe-email">
<label
id="subscribe-field-2-label"
for="subscribe-field-2"
class="screen-reader-text"
>
Type your email… </label>
<input
required="required"
type="email"
name="email"
autocomplete="email"
style="font-size: 16px;padding: 15px 23px 15px 23px;border-radius: 50px;border-width: 1px;"
placeholder="Type your email…"
value=""
id="subscribe-field-2"
title="Please fill in this field."
/> </p>
<p id="subscribe-submit"
>
<input type="hidden" name="action" value="subscribe"/>
<input type="hidden" name="blog_id" value="238510005"/>
<input type="hidden" name="source" value="https://blog.eightnoteight.dev/2023/02/26/health-checking/"/>
<input type="hidden" name="sub-type" value="subscribe-block"/>
<input type="hidden" name="app_source" value="atomic-subscription-modal-lo"/>
<input type="hidden" name="redirect_fragment" value="subscribe-blog-2"/>
<input type="hidden" name="lang" value="en_GB"/>
<input type="hidden" id="_wpnonce" name="_wpnonce" value="9a1bc89944" /><input type="hidden" name="_wp_http_referer" value="/2023/02/26/health-checking/" /><input type="hidden" name="post_id" value="105123576"/> <button type="submit"
class="wp-block-button__link"
style="font-size: 16px;padding: 15px 23px 15px 23px;margin: 0; margin-left: 10px;border-radius: 50px;border-width: 1px;"
name="jetpack_subscriptions_widget"
>
Subscribe </button>
</p>
</div>
</form>
</div>
</div>
<p class="has-text-align-center jetpack-subscription-modal__close wp-block-paragraph" style="margin-top:20px;font-size:14px"><a href="#">Continue reading</a></p>
</div>
</div>
</div>
<script type="text/javascript">
window.WPCOM_sharing_counts = {"https://blog.eightnoteight.dev/2023/02/26/health-checking/":105123576};
</script>
<script id="wp-dom-ready-js" src="https://blog.eightnoteight.dev/wp-content/plugins/gutenberg/build/scripts/dom-ready/index.min.js?ver=3fe927cab37bf38d6a23"></script>
<script type='text/javascript' src='https://blog.eightnoteight.dev/wp-includes/js/dist/vendor/wp-polyfill.min.js?m=1784059681'></script>
<script data-wp-strategy="defer" defer id="jetpack-block-subscriptions-js" src="https://blog.eightnoteight.dev/wp-content/plugins/jetpack/_inc/blocks/subscriptions/view.js?minify=false&#038;ver=16.2"></script>
<script id="subscription-modal-js-js-extra">
var subscriptionData = {"homeUrl":"blog.eightnoteight.dev"};
//# sourceURL=subscription-modal-js-js-extra
</script>
<script type='text/javascript' src='https://blog.eightnoteight.dev/wp-content/plugins/jetpack/modules/comments/subscription-modal-on-comment/subscription-modal.js?m=1764003632'></script>
<script id="enlighterjs-js" src="https://blog.eightnoteight.dev/wp-content/plugins/enlighter/cache/enlighterjs.min.js?ver=YJTnwXKT5qtyq%2Bn"></script>
<script id="enlighterjs-js-after">
!function(e,n){if("undefined"!=typeof EnlighterJS){var o={"selectors":{"block":"pre.EnlighterJSRAW","inline":"code.EnlighterJSRAW"},"options":{"indent":4,"ampersandCleanup":true,"linehover":true,"rawcodeDbclick":false,"textOverflow":"break","linenumbers":true,"theme":"enlighter","language":"generic","retainCssClasses":false,"collapse":false,"toolbarOuter":"","toolbarTop":"{BTN_RAW}{BTN_COPY}{BTN_WINDOW}{BTN_WEBSITE}","toolbarBottom":""}};(e.EnlighterJSINIT=function(){EnlighterJS.init(o.selectors.block,o.selectors.inline,o.options)})()}else{(n&&(n.error||n.log)||function(){})("Error: EnlighterJS resources not loaded yet!")}}(window,console);
//# sourceURL=enlighterjs-js-after
</script>
<script id="jetpack-stats-js-before">
_stq = window._stq || [];
_stq.push([ "view", {"v":"ext","blog":"238510005","post":"105123576","tz":"5.5","srv":"blog.eightnoteight.dev","hp":"atomic","ac":"2","amp":"0","j":"1:16.2"} ]);
_stq.push([ "clickTrackerInit", "238510005", "105123576" ]);
//# sourceURL=jetpack-stats-js-before
</script>
<script data-wp-strategy="defer" defer fetchpriority="low" id="jetpack-stats-js" src="https://stats.wp.com/e-202637.js"></script>
<script id="sharing-js-js-extra">
var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"};
//# sourceURL=sharing-js-js-extra
</script>
<script id="sharing-js-js" src="https://blog.eightnoteight.dev/wp-content/plugins/jetpack/_inc/build/sharedaddy/sharing.min.js?ver=16.2"></script>
<script id="sharing-js-js-after">
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
window.WPCOM_sharing_popups[ "x" ] = "menubar=1,resizable=1,width=600,height=350";
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
window.WPCOM_sharing_popups[ "linkedin" ] = "menubar=1,resizable=1,width=580,height=450";
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
window.WPCOM_sharing_popups[ "threads" ] = "menubar=1,resizable=1,width=600,height=400";
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400";
//# sourceURL=sharing-js-js-after
</script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://blog.eightnoteight.dev/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://blog.eightnoteight.dev/wp-includes/js/wp-emoji-loader.min.js
</script>
</body>
</html>