Ch+17.1+-+The+Western+Democracies

<!DOCTYPE html> 

 window.NREUM||(NREUM={});NREUM.info={"beacon":"bam.nr-data.net","errorBeacon":"bam.nr-data.net","licenseKey":"bc12d0ca7c","applicationID":"1887052,5587075","transactionName":"IlgMRUFXWFhWEE5CQwBDF0IcS0BVRxcSHl4PUwdJ","queueTime":0,"applicationTime":233,"agent":""} window.NREUM||(NREUM={}),__nr_require=function(e,t,n){function r(n){if(!t[n]){var o=t[n]={exports:{}};e[n][0].call(o.exports,function(t){var o=e[n][1][t];return r(o||t)},o,o.exports)}return t[n].exports}if("function"==typeof __nr_require)return __nr_require;for(var o=0;o<n.length;o++)r(n[o]);return r}({1:[function(e,t,n){function r{}function o(e,t,n){return function{return i(e,[f.now].concat(u(arguments)),t?null:this,n),t?void 0:this}}var i=e("handle"),a=e(2),u=e(3),c=e("ee").get("tracer"),f=e("loader"),s=NREUM;"undefined"==typeof window.newrelic&&(newrelic=s);var p=["setPageViewName","setCustomAttribute","setErrorHandler","finished","addToTrace","inlineHit","addRelease"],d="api-",l=d+"ixn-";a(p,function(e,t){s[t]=o(d+t,!0,"api")}),s.addPageAction=o(d+"addPageAction",!0),s.setCurrentRouteName=o(d+"routeName",!0),t.exports=newrelic,s.interaction=function{return(new r).get};var m=r.prototype={createTracer:function(e,t){var n={},r=this,o="function"==typeof t;return i(l+"tracer",[f.now,e,n],r),function{if(c.emit((o?"":"no-")+"fn-start",[f.now,r,o],n),o)try{return t.apply(this,arguments)}catch(e){throw c.emit("fn-err",[arguments,this,e],n),e}finally{c.emit("fn-end",[f.now],n)}}}};a("setName,setAttribute,save,ignore,onEnd,getContext,end,get".split(","),function(e,t){m[t]=o(l+t)}),newrelic.noticeError=function(e){"string"==typeof e&&(e=new Error(e)),i("err",[e,f.now])}},{}],2:[function(e,t,n){function r(e,t){var n=[],r="",i=0;for(r in e)o.call(e,r)&&(n[i]=t(r,e[r]),i+=1);return n}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],3:[function(e,t,n){function r(e,t,n){t||(t=0),"undefined"==typeof n&&(n=e?e.length:0);for(var r=-1,o=n-t||0,i=Array(o<0?0:o);++r<o;)i[r]=e[t+r];return i}t.exports=r},{}],4:[function(e,t,n){t.exports={exists:"undefined"!=typeof window.performance&&window.performance.timing&&"undefined"!=typeof window.performance.timing.navigationStart}},{}],ee:[function(e,t,n){function r{}function o(e){function t(e){return e&&e instanceof r?e:e?c(e,u,i):i}function n(n,r,o,i){if(!d.aborted||i){e&&e(n,r,o);for(var a=t(o),u=m(n),c=u.length,f=0;f<c;f++)u[f].apply(a,r);var p=s[y[n]];return p&&p.push([b,n,r,a]),a}}function l(e,t){v[e]=m(e).concat(t)}function m(e){return v[e]||[]}function w(e){return p[e]=p[e]||o(n)}function g(e,t){f(e,function(e,n){t=t||"feature",y[n]=t,t in s||(s[t]=[])})}var v={},y={},b={on:l,emit:n,get:w,listeners:m,context:t,buffer:g,abort:a,aborted:!1};return b}function i{return new r}function a{(s.api||s.feature)&&(d.aborted=!0,s=d.backlog={})}var u="nr@context",c=e("gos"),f=e(2),s={},p={},d=t.exports=o;d.backlog=s},{}],gos:[function(e,t,n){function r(e,t,n){if(o.call(e,t))return e[t];var r=n;if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:r,writable:!0,enumerable:!1}),r}catch(i){}return e[t]=r,r}var o=Object.prototype.hasOwnProperty;t.exports=r},{}],handle:[function(e,t,n){function r(e,t,n,r){o.buffer([e],r),o.emit(e,t,n)}var o=e("ee").get("handle");t.exports=r,r.ee=o},{}],id:[function(e,t,n){function r(e){var t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===window?0:a(e,i,function{return o++})}var o=1,i="nr@id",a=e("gos");t.exports=r},{}],loader:[function(e,t,n){function r{if(!x++){var e=h.info=NREUM.info,t=d.getElementsByTagName("script")[0];if(setTimeout(s.abort,3e4),!(e&&e.licenseKey&&e.applicationID&&t))return s.abort;f(y,function(t,n){e[t]||(e[t]=n)}),c("mark",["onload",a+h.offset],null,"api");var n=d.createElement("script");n.src="https://"+e.agent,t.parentNode.insertBefore(n,t)}}function o{"complete"===d.readyState&&i}function i{c("mark",["domContent",a+h.offset],null,"api")}function a{return E.exists&&performance.now?Math.round(performance.now):(u=Math.max((new Date).getTime,u))-h.offset}var u=(new Date).getTime,c=e("handle"),f=e(2),s=e("ee"),p=window,d=p.document,l="addEventListener",m="attachEvent",w=p.XMLHttpRequest,g=w&&w.prototype;NREUM.o={ST:setTimeout,SI:p.setImmediate,CT:clearTimeout,XHR:w,REQ:p.Request,EV:p.Event,PR:p.Promise,MO:p.MutationObserver};var v=""+location,y={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",agent:"js-agent.newrelic.com/nr-1071.min.js"},b=w&&g&&g[l]&&!/CriOS/.test(navigator.userAgent),h=t.exports={offset:u,now:a,origin:v,features:{},xhrWrappable:b};e(1),d[l]?(d[l]("DOMContentLoaded",i,!1),p[l]("load",r,!1)):(d[m]("onreadystatechange",o),p[m]("onload",r)),c("mark",["firstbyte",u],null,"api");var x=0,E=e(4)},{}]},{},["loader"]); TES and THE Status 

  





@font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=trust.tes.com'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-f0b2f7c12b6b87c65c02d3c1738047ea67a7607fd767056d8a2964cc6a2393f7.eot?host=trust.tes.com#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-e642ffe82005c6208632538a557e7f5dccb835c0303b06f17f55ccf567907241.woff?host=trust.tes.com') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaLight-0f094da9b301d03292f97db5544142a16f9f2ddf50af91d44753d9310c194c5f.ttf?host=trust.tes.com') format('truetype'); font-weight:300; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=trust.tes.com'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-366d17769d864aa72f27defaddf591e460a1de4984bb24dacea57a9fc1d14878.eot?host=trust.tes.com#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-2ee4c449a9ed716f1d88207bd1094e21b69e2818b5cd36b28ad809dc1924ec54.woff?host=trust.tes.com') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegular-a40a469edbd27b65b845b8000d47445a17def8ba677f4eb836ad1808f7495173.ttf?host=trust.tes.com') format('truetype'); font-weight:400; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=trust.tes.com'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0bf83a850b45e4ccda15bd04691e3c47ae84fec3588363b53618bd275a98cbb7.eot?host=trust.tes.com#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-0c394ec7a111aa7928ea470ec0a67c44ebdaa0f93d1c3341abb69656cc26cbdd.woff?host=trust.tes.com') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaRegularIt-9e43859f8015a4d47d9eaf7bafe8d1e26e3298795ce1f4cdb0be0479b8a4605e.ttf?host=trust.tes.com') format('truetype'); font-weight:400; font-style:italic; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-09566917307251d22021a3f91fc646f3e45f8d095209bcd2cded8a1979f06e54.eot?host=trust.tes.com'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-09566917307251d22021a3f91fc646f3e45f8d095209bcd2cded8a1979f06e54.eot?host=trust.tes.com#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-86724fb2152613d735ba47c3f47a9ad2424b898bea4bece213dacee40344f966.woff?host=trust.tes.com') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaSemibold-cf3e4eb7fbdf6fb83e526cc2a0141e55b01097e6e1abfd4cbdc3eda75d183f74.ttf?host=trust.tes.com') format('truetype'); font-weight:500; font-style:normal; } @font-face { font-family: 'proxima-nova'; src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-622ea489d20e12e691663f83217105e957e2d3d09703707d40155a29c06cc9d9.eot?host=trust.tes.com'); src: url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-622ea489d20e12e691663f83217105e957e2d3d09703707d40155a29c06cc9d9.eot?host=trust.tes.com#iefix') format('embedded-opentype'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-c8dc577ff7f76d2fc199843e38c04bb2e9fd15889421358d966a9f846c2ed1cd.woff?host=trust.tes.com') format('woff'), url('https://dka575ofm4ao0.cloudfront.net/assets/ProximaNovaBold-27177fe9242acbe089276ee587feef781446667ffe9b6fdc5b7fe21ad73e12f3.ttf?host=trust.tes.com') format('truetype'); font-weight:700; font-style:normal; }

   



 <link rel="alternate" type="application/rss+xml" href="https://trust.tes.com/history.rss" title="TES and THE Status History - RSS Feed">

<meta name="_globalsign-domain-verification" content="y_VzfckMy4iePo5oDJNivyYIjh8LffYa4jzUndm_bZ"/>

<meta name="robots" content="noindex,nofollow">

<link rel="alternate" type="application/atom+xml" title="ATOM" href="https://trust.tes.com/history.atom" />

<meta name="csrf-param" content="authenticity_token" /> <meta name="csrf-token" content="gy9LHJ//N0tqUBep/g3/HB6Z5C9dsyscpDXXE9dsnZxdm5kRf9uH+cwyvkti+pQIdf2qKmbiyqkzqoWYMl9SeQ==" />

<link rel="stylesheet" media="screen" href="https://dka575ofm4ao0.cloudfront.net/packs/common-ef0123f26721c98513d375fb22623e8f.css" /> <link rel="stylesheet" media="all" href="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-e88a0646280e166935256432457d70e54f12d3935927c6dc29801b6a2f7aaeb9.css" />

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js">

window.pageColorData = {"blue":"#3498DB","border":"#E0E0E0","body_background":"#ffffff","font":"#333333","graph":"#97BF78","green":"#138808","light_font":"#AAAAAA","link":"#3498db","orange":"#e67e22","red":"#e1665c","yellow":"#f1c40f"};

/* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ /* BODY BACKGROUND */ body, .layout-content.status.status-api .section .example-container .example-opener .color-secondary, .grouped-items-selector, .layout-content.status.status-full-history .history-nav a.current { background-color:#ffffff; }

/* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ /* PRIMARY FONT COLOR */ body.status, .color-primary, .color-primary:hover, .layout-content.status-index .status-day .update-title.impact-none a, .layout-content.status-index .status-day .update-title.impact-none a:hover, .layout-content.status-index .timeframes-container .timeframe.active, .layout-content.status-full-history .month .incident-container .impact-none, .layout-content.status.status-index .incidents-list .incident-title.impact-none a, .incident-history .impact-none, .layout-content.status .grouped-items-selector.inline .grouped-item.active, .layout-content.status.status-full-history .history-nav a.current, .layout-content.status.status-full-history .history-nav a:not(.current):hover { color:#333333; }

.layout-content.status.status-index .components-statuses .component-container .name { color:#333333; color:rgba(51,51,51,.8); }

/* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ /* SECONDARY FONT COLOR */ small, .layout-content.status .table-row .date, .color-secondary, .layout-content.status .grouped-items-selector.inline .grouped-item, .layout-content.status.status-full-history .history-footer .pagination a.disabled, .layout-content.status.status-full-history .history-nav a { color:#AAAAAA; }

/* BORDER COLOR */ /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */  /* BORDER COLOR */ body.status .layout-content.status .border-color, hr, .tooltip-base, .markdown-display table { border-color:#E0E0E0; }

.markdown-display table td { border-top-color:#E0E0E0; }

.markdown-display table td + td, .markdown-display table th + th { border-left-color:#E0E0E0; }

/* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ /* CSS REDS */ .layout-content.status.status-index .status-day .update-title.impact-critical a, .layout-content.status.status-index .status-day .update-title.impact-critical a:hover, .layout-content.status.status-index .page-status.status-critical, .layout-content.status.status-index .unresolved-incident.impact-critical .incident-title, .flat-button.background-red { background-color:#e1665c; } .layout-content.status-index .components-statuses .component-container.status-red:after, .layout-content.status-full-history .month .incident-container .impact-critical, .layout-content.status-incident .incident-name.impact-critical, .layout-content.status.status-index .incidents-list .incident-title.impact-critical a, .status-red .icon-indicator, .incident-history .impact-critical, .components-container .component-inner-container.status-red .component-status, .components-container .component-inner-container.status-red .icon-indicator { color:#e1665c; }

.layout-content.status.status-index .unresolved-incident.impact-critical .updates { border-color:#e1665c; }

/* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ /* CSS ORANGES */ .layout-content.status.status-index .status-day .update-title.impact-major a, .layout-content.status.status-index .status-day .update-title.impact-major a:hover, .layout-content.status.status-index .page-status.status-major, .layout-content.status.status-index .unresolved-incident.impact-major .incident-title { background-color:#e67e22; } .layout-content.status-index .components-statuses .component-container.status-orange:after, .layout-content.status-full-history .month .incident-container .impact-major, .layout-content.status-incident .incident-name.impact-major, .layout-content.status.status-index .incidents-list .incident-title.impact-major a, .status-orange .icon-indicator, .incident-history .impact-major, .components-container .component-inner-container.status-orange .component-status, .components-container .component-inner-container.status-orange .icon-indicator { color:#e67e22; }

.layout-content.status.status-index .unresolved-incident.impact-major .updates { border-color:#e67e22; }

/* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ /* CSS YELLOWS */ .layout-content.status.status-index .status-day .update-title.impact-minor a, .layout-content.status.status-index .status-day .update-title.impact-minor a:hover, .layout-content.status.status-index .page-status.status-minor, .layout-content.status.status-index .unresolved-incident.impact-minor .incident-title, .layout-content.status.status-index .scheduled-incidents-container .tab { background-color:#f1c40f; } .layout-content.status-index .components-statuses .component-container.status-yellow:after, .layout-content.status-full-history .month .incident-container .impact-minor, .layout-content.status-incident .incident-name.impact-minor, .layout-content.status.status-index .incidents-list .incident-title.impact-minor a, .status-yellow .icon-indicator, .incident-history .impact-minor, .components-container .component-inner-container.status-yellow .component-status, .components-container .component-inner-container.status-yellow .icon-indicator, .layout-content.status.manage-subscriptions .confirmation-infobox .fa { color:#f1c40f; }

.layout-content.status.status-index .unresolved-incident.impact-minor .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#f1c40f; }

/* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ /* CSS BLUES */ .layout-content.status.status-index .status-day .update-title.impact-maintenance a, .layout-content.status.status-index .status-day .update-title.impact-maintenance a:hover, .layout-content.status.status-index .page-status.status-maintenance, .layout-content.status.status-index .unresolved-incident.impact-maintenance .incident-title, .layout-content.status.status-index .scheduled-incidents-container .tab { background-color:#3498DB; }

.layout-content.status-index .components-statuses .component-container.status-blue:after, .layout-content.status-full-history .month .incident-container .impact-maintenance, .layout-content.status-incident .incident-name.impact-maintenance, .layout-content.status.status-index .incidents-list .incident-title.impact-maintenance a, .status-blue .icon-indicator, .incident-history .impact-maintenance, .components-container .component-inner-container.status-blue .component-status, .components-container .component-inner-container.status-blue .icon-indicator { color:#3498DB; }

.layout-content.status.status-index .unresolved-incident.impact-maintenance .updates, .layout-content.status.status-index .scheduled-incidents-container { border-color:#3498DB; }

/* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ /* CSS GREENS */ .layout-content.status.status-index .page-status.status-none { background-color:#138808; } .layout-content.status-index .components-statuses .component-container.status-green:after, .status-green .icon-indicator, .components-container .component-inner-container.status-green .component-status, .components-container .component-inner-container.status-green .icon-indicator { color:#138808; }

/* CSS LINK COLOR */ /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */  /* CSS LINK COLOR */ a, a:hover, .layout-content.status-index .page-footer span a:hover, .layout-content.status-index .timeframes-container .timeframe:not(.active):hover, .layout-content.status-incident .subheader a:hover { color:#3498db; } .flat-button, .masthead .updates-dropdown-container .show-updates-dropdown, .layout-content.status-full-history .show-filter.open { background-color:#3498db; }

/* CUSTOM COLOR OVERRIDES FOR UPTIME SHOWCASE */ .components-section .components-uptime-link { color: #aaaaaa; }

.layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item { color: #aaaaaa; opacity: 0.8; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .legend-item.light { color: #aaaaaa; opacity: 0.5; } .layout-content.status .shared-partial.uptime-90-days-wrapper .legend .spacer { background: #aaaaaa; opacity: 0.3; }

<link rel="stylesheet" type="text/css" href="//dka575ofm4ao0.cloudfront.net/page_display_customizations-custom_css_externals/5413/external20161018-83977-1e2rp2k.css">

<body class="status index status-none">

<a href="http://www.tes.com"><img style="" src="//dka575ofm4ao0.cloudfront.net/pages-transactional_logos/retina/5463/VkuWW5BNS7mREg3czin8" alt="Vkuww5bns7mreg3czin8" /></a>

<a href="#" data-js-hook="show-updates-dropdown" id="show-updates-dropdown" class="show-updates-dropdown">

</a> <a href="#updates-dropdown-email" id="updates-dropdown-email-btn"> </a> <a href="#updates-dropdown-sms" id="updates-dropdown-sms-btn"> </a> <a href="#updates-dropdown-webhook" id="updates-dropdown-webhook-btn"> </a> <a href="#updates-dropdown-support" id="updates-dropdown-support-btn"> </a> <a href="#updates-dropdown-atom" id="updates-dropdown-atom-btn"> </a> <a href="#" data-js-hook="updates-dropdown-close" id="updates-dropdown-close-btn"> x     </a>

Get email notifications whenever TES and THE creates or updates an incident. <form id="subscribe-form-email" action="/subscribe.json" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /> <input name="email" id="email" type="text" placeholder="Email Address" class="full-width" data-js-hook="email-notification-field"> <input type="submit" value="Subscribe via Email" class="flat-button full-width" id="subscribe-btn-email" data-disabled-text="Subscribing..." data-revert-on-success="true">

Get text message notifications whenever TES and THE creates or resolves an incident. <form id="subscribe-form-sms" action="/subscribe.json" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /> <select name="phone_country" id="phone-country" data-js-hook="phone-country"> Afghanistan (+93) Albania (+355) Algeria (+213) American Samoa (+1) Andorra (+376) Angola (+244) Anguilla (+1) Antigua and Barbuda (+1) Argentina (+54) Armenia (+374) Aruba (+297) Australia/Cocos/Christmas Island (+61) Austria (+43) Azerbaijan (+994) Bahamas (+1) Bahrain (+973) Bangladesh (+880) Barbados (+1) Belarus (+375) Belgium (+32) Belize (+501) Benin (+229) Bermuda (+1) Bolivia (+591) Bosnia and Herzegovina (+387) Botswana (+267) Brazil (+55) Brunei (+673) Bulgaria (+359) Burkina Faso (+226) Burundi (+257) Cambodia (+855) Cameroon (+237) Canada (+1) Cape Verde (+238) Cayman Islands (+1) Central Africa (+236) Chad (+235) Chile (+56) China (+86) Colombia (+57) Comoros (+269) Congo (+242) Congo, Dem Rep (+243) Costa Rica (+506) Croatia (+385) Cyprus (+357) Czech Republic (+420) Denmark (+45) Djibouti (+253) Dominica (+1) Dominican Republic (+1) Egypt (+20) El Salvador (+503) Equatorial Guinea (+240) Estonia (+372) Ethiopia (+251) Faroe Islands (+298) Fiji (+679) Finland/Aland Islands (+358) France (+33) French Guiana (+594) French Polynesia (+689) Gabon (+241) Gambia (+220) Georgia (+995) Germany (+49) Ghana (+233) Gibraltar (+350) Greece (+30) Greenland (+299) Grenada (+1) Guadeloupe (+590) Guam (+1) Guatemala (+502) Guinea (+224) Guyana (+592) Haiti (+509) Honduras (+504) Hong Kong (+852) Hungary (+36) Iceland (+354) India (+91) Indonesia (+62) Iran (+98) Iraq (+964) Ireland (+353) Israel (+972) Italy (+39) Jamaica (+1) Japan (+81) Jordan (+962) Kenya (+254) Korea, Republic of (+82) Kuwait (+965) Kyrgyzstan (+996) Laos (+856) Latvia (+371) Lebanon (+961) Lesotho (+266) Liberia (+231) Libya (+218) Liechtenstein (+423) Lithuania (+370) Luxembourg (+352) Macao (+853) Macedonia (+389) Madagascar (+261) Malawi (+265) Malaysia (+60) Maldives (+960) Mali (+223) Malta (+356) Martinique (+596) Mauritania (+222) Mauritius (+230) Mexico (+52) Monaco (+377) Mongolia (+976) Montenegro (+382) Montserrat (+1) Morocco/Western Sahara (+212) Mozambique (+258) Namibia (+264) Nepal (+977) Netherlands (+31) New Zealand (+64) Nicaragua (+505) Niger (+227) Nigeria (+234) Norway (+47) Oman (+968) Pakistan (+92) Palestinian Territory (+970) Panama (+507) Paraguay (+595) Peru (+51) Philippines (+63) Poland (+48) Portugal (+351) Puerto Rico (+1) Qatar (+974) Reunion/Mayotte (+262) Romania (+40) Russia/Kazakhstan (+7) Rwanda (+250) Samoa (+685) San Marino (+378) Saudi Arabia (+966) Senegal (+221) Serbia (+381) Seychelles (+248) Sierra Leone (+232) Singapore (+65) Slovakia (+421) Slovenia (+386) South Africa (+27) Spain (+34) Sri Lanka (+94) St Kitts and Nevis (+1) St Lucia (+1) St Vincent Grenadines (+1) Sudan (+249) Suriname (+597) Swaziland (+268) Sweden (+46) Switzerland (+41) Syria (+963) Taiwan (+886) Tajikistan (+992) Tanzania (+255) Thailand (+66) Togo (+228) Tonga (+676) Trinidad and Tobago (+1) Tunisia (+216) Turkey (+90) Turks and Caicos Islands (+1) Uganda (+256) Ukraine (+380) United Arab Emirates (+971) <option selected="selected" value="gb">United Kingdom (+44) United States (+1) Uruguay (+598) Uzbekistan (+998) Venezuela (+58) Vietnam (+84) Virgin Islands, British (+1) Virgin Islands, U.S. (+1) Yemen (+967) Zambia (+260) Zimbabwe (+263) <input name="phone_number" id="phone-number" type="text" placeholder="ex. 6505551234" class="prepend full-width" data-js-hook="sms-notification-field">

<input type="submit" value="Subscribe via Text Message" class="flat-button full-width" id="subscribe-btn-sms" data-disabled-text="Subscribing..." data-revert-on-success="true"> <div class="terms_and_privacy_information small">Message and data rates may apply. By subscribing you agree to our <a target="_blank" href="https://www.atlassian.com/legal/customer-agreement">Terms and Conditions</a>.

Get webhook notifications whenever TES and THE creates an incident, updates an incident, or changes a component status. <form id="subscribe-form-webhook" action="/subscribe.json" accept-charset="UTF-8" data-remote="true" method="post"><input name="utf8" type="hidden" value="&#x2713;" /> <input type="text" name="endpoint" id="endpoint-webhooks" placeholder="http://www.yourdomain.com/endpoint/here" data-js-hook="endpoint" class="full-width" /> <p class="help-block">The URL we should send the webhooks to

<input type="text" name="email" id="email-webhooks" placeholder="Email Address" data-js-hook="email" class="full-width" /> <p class="help-block">We'll send you email if your endpoint fails

<input type="submit" value="Subscribe To Notifications" class="flat-button full-width" id="subscribe-btn-webhook" data-disabled-text="Subscribing..." data-revert-on-success="true">

Visit our <a target="_blank" href="https://www.tes.com/contact?navcode=274">support site</a>.

Get the <a href="https://trust.tes.com/history.atom" target="_blank">Atom Feed</a> or <a href="https://trust.tes.com/history.rss" target="_blank">RSS Feed</a>.

All Systems Operational

<h4 class="font-largest"> <a id="about-this-site" href="#about-this-site" class="no-link">About This Site</a> <p class="color-secondary font-regular"> This page provides an overview of current status of all of the key services that power tes.com and timeshighereducation.com. Please subscribe to be kept up to date on scheduled maintenance and incidents.

<div data-component-id="mg61lgm7mf27" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Home Page

?      Operational

<div data-component-id="6ms9l5w5st8z" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Jobs

<span class="tooltip-base tool" title="Collection of services that serve tes.com/jobs - home, hubs, search, job detail page and employer / group detail pages.">? Operational

<div data-component-id="4w33frm10xn3" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Resources

<span class="tooltip-base tool" title="Collection of services that serve key parts of resources: search, resource detail page, author shop, author / user dashboards.">? Operational

<div data-component-id="bdqbfnlgx2br" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Payment Gateway

?      Operational

<div data-component-id="3x1n977p63c6" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Community

?      Operational

<div data-component-id="5w2p4bl0btx1" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes News

<span class="tooltip-base tool" title="Drupal site that drives all of tes.com/news">? Operational

<div data-component-id="xl4c47mzl75x" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Institute

<span class="tooltip-base tool" title="Drupal site that drives all of tes.com/institute">? Operational

<div data-component-id="vf32r3whbhty" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Store

<span class="tooltip-base tool" title="Drupal commerce site that drives tes.com/store">? Operational

<div data-component-id="nfvgz7b06zww" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes School Portal

<span class="tooltip-base tool" title="Services that make up the tes.com School Portal - tes.com/schools">? Operational

<div data-component-id="v20trd0v3phn" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Tes Teach

<span class="tooltip-base tool" title="RoR application that serves tes.com/lessons and the api for the tes teach mobile app.">? Operational

<div data-component-id="xvfdbfmcjynm" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

THE Home Page

Operational

<div data-component-id="c7sgh2hr678m" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

THE Jobs

Operational

<div data-component-id="vhytl2fgw6rp" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

THE World University Rankings

Operational

<div data-component-id="0zh7kh9qnnv8" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Wikispaces

?      Operational

<div data-component-id="7mz49s3sg5pm" class="component-inner-container status-green " data-component-status="operational" data-js-hook="component-group-opener">

Platform

<span class="component-status tool" title="Groups take on the status of their most degraded child component or service. Click to see the status of the individual children."> Operational

<div data-component-id="sfx9134pdr12" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

Fastly London (LCY)

Operational

<div data-component-id="yh5wb0r9jb0t" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

AWS ec2-eu-west-1

Operational

<div data-component-id="bjq3tf8wgqnp" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

AWS cloudfront

Operational

<div data-component-id="b0lkf0qb759h" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

AWS s3-eu-west-1

Operational

<div data-component-id="mz9j2p7qqwbj" class="component-inner-container status-green " data-component-status="operational" data-js-hook="">

AWS route53

Operational

Operational Degraded Performance Partial Outage Major Outage Maintenance

<a class="font-largest no-link" id="system-metrics" href="#system-metrics">System Metrics</a> <a href="#" class="timeframe color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="month">Month</a> <a href="#" class="timeframe color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="week"><span class="translation_missing" title="translation missing: en.week">Week </a> <a href="#" class="timeframe active color-secondary font-regular border-color" data-js-hook="data-time-period-toggle" data-time-period="day">Day</a> TES - Core Traffic

TES - Authentication - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Logged in Home - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Drupal - News/Resources/Store/Institute - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Resource Detail Page - Requests

TES - Resource Detail Page - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Resource Reviews - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Resource Search - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Resources - Payment Gateway - Requests

TES - Resources - Payment Gateway - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Job Detail Page - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Job Application - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - School Portal - Response Time ?

<span class="translation_missing" title="translation missing: en.fetching">Fetching THE/WUR - Drupal - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - User profile - Response Time

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Community - Overall Traffic

<span class="translation_missing" title="translation missing: en.fetching">Fetching TES - Community - Response Time ?

<span class="translation_missing" title="translation missing: en.fetching">Fetching

<a class="font-largest no-link" id="past-incidents" href="#past-incidents">Past Incidents</a> Jul <var data-var="date">30, <var data-var="year">2018 <p class="color-secondary">No incidents reported today.

Jul <var data-var="date">29, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">28, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">27, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">26, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">25, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">24, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">23, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">22, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">21, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">20, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">19, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">18, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">17, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

Jul <var data-var="date">16, <var data-var="year">2018 <p class="color-secondary">No incidents reported.

<a href="/history" class="history-footer-link"> &larr; Incident History</a>

<a href="https://www.statuspage.io/powered-by?utm_source=inapp&utm_medium=powered-by&utm_campaign=trust.tes.com&utm_content=status-pages" target="_blank" class="color-secondary" rel="noopener noreferrer nofollow">Powered by Statuspage</a>

<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_manifest-0816d2c24ccdae8e139c9859e85823d665d54e137635ac5a6ab6eb311f7250ba.js">

<script src="https://dka575ofm4ao0.cloudfront.net/assets/register_subscription_form-3fd70416ac567c9e80fb4e1c0bfde0de779db90e80bbf28fabcaba62c004984b.js">

<script type="text/javascript"> $(function {         SP.currentPage.registerSubscriptionForm('email');

SP.currentPage.registerSubscriptionForm('sms');

SP.currentPage.registerSubscriptionForm('webhook'); });

$(function {       });

<script src="https://dka575ofm4ao0.cloudfront.net/assets/status_common-f8b35586d7e6820c2761e822c9860a9ad5f3706467a0f2ea792990ed76958f20.js"> SP.pollForChanges('/index.json');

$(function {

$('.tool').tooltipster({       animationDuration: 100,        contentAsHTML: true,        delay: 100,        theme: 'tooltipster-borderless',        functionInit: function (instance, helper) {          var $origin = $(helper.origin),              dataOptions = $origin.attr('data-tooltip-config');          if (dataOptions){            dataOptions = JSON.parse(dataOptions);            $.each(dataOptions, function(name, option){ instance.option(name, option); });         }        }      });

var NON_OPERATIONAL_STATUSES = ['major_outage', 'partial_outage'];

// Returns an array of components in a non-operational state function nonOperationalComponents (components) { var result = []; for (var i = 0; i < components.length; i++) { var status = components[i].getAttribute('data-component-status'); if (~NON_OPERATIONAL_STATUSES.indexOf(status)) { result.push(components[i]); }       }        return result; }

// Update the given component's tooltips to represent accurate update deltas function updateShowcasedComponents (components) { for (var i = 0; i < components.length; i++) { updateComponentToolTip(components[i]) }     }

// Returns the client's current epoch time function currentTime { return Math.floor((new Date).getTime / 1000); }

// Returns the last (today's) rect for a given component function todaysRect (component) { var rects = component.getElementsByTagName('rect'); return rects[rects.length - 1]; }

// Parses the components current status function componentStatus (component) { return component.getAttribute('data-component-status'); }

// Parses the issued meta tag an returns the epoch time stamp function pageUpdatedAt { var metas = document.getElementsByTagName('meta'); for (var i = 0; i < metas.length; i++) { if (metas[i].getAttribute('name') === 'issued') { return parseInt(metas[i].getAttribute('content')); }       }        return currentTime; }

// Returns a rect's tooltip instance function tooltipInstance (rect) { return $(rect).tooltipster('instance'); }

// Returns a time object representing the time since the page has been cached, // according to the browser function timeSinceUpdate { var minutesSinceUpdate = Math.round((currentTime - pageUpdatedAt) / 60);

return { hours: Math.floor(minutesSinceUpdate / 60), minutes: minutesSinceUpdate % 60, };     }

// Parse a status substring, and return a time object function timeFromString (string) { var hourMatch = string.match(/(\d+)h/); var minuteMatch = string.match(/(\d+)m/); var hours = hourMatch ? parseInt(hourMatch[1]) : 0; var minutes = minuteMatch ? parseInt(minuteMatch[1]) : 0;

return { hours: hours, minutes: minutes, };     }

// Merge two time objects function increasedTimeBy(time, update) { var minutes = (time.hours * 60) + time.minutes; var updatedMinutes = ((update.hours * 60) + update.minutes) + minutes;

return { hours: Math.floor(updatedMinutes / 60), minutes: updatedMinutes % 60 };     }

// outputs a status substring, given a status and time object // ex. '2h 31m of major outage' function durationOfStatus(status, time) { var output = []; if (time.hours > 0) output.push(time.hours + 'h') if (time.minutes > 0) output.push(time.minutes + 'm'); output.push('of'); output.push(status.replace('_', ' ')); return output.join(' '); }

function updateComponentToolTip (component) { // Grab the current status we're operating on       var currentStatus = componentStatus(component); // The last rect (today) is the tooltip we need to update var lastRect = todaysRect(component); var tooltip = tooltipInstance(lastRect); var title = String(tooltip.content);

// Since the tooltip content is xml, we need to create a document so we can operate on what we need var parser = new DOMParser; var xml = parser.parseFromString(title, 'text/xml');

// Grab the status substring var currentStatusNode = $(xml).find('span[data-status="' + currentStatus + '"]'); var newTitle = currentStatusNode.text;

// What time does the status substring show right now? var initialTime = timeFromString(newTitle); // How long has it been since the app cached this page? var timeSincePageUpdate =timeSinceUpdate;

// If we have a delta since caching, we update the tooltip text to show an accurate delta if (timeSincePageUpdate.minutes > 0 || timeSincePageUpdate.hours > 0) { var newTime = increasedTimeBy(initialTime, timeSincePageUpdate); currentStatusNode.text(durationOfStatus(currentStatus, newTime)); }

// Serialize our document and update the tooltip var oSerializer = new XMLSerializer; var sXML = oSerializer.serializeToString(xml); tooltip.content(sXML); }

var showcasedComponents = document.getElementsByClassName('component-inner-container showcased'); var affectedComponents = nonOperationalComponents(showcasedComponents);

updateShowcasedComponents(affectedComponents);

// clicks on first tab in subscribe popout since we won't know which is first // upon construction in the ruby code $('.updates-dropdown-nav > a').eq(0).click;

// twitter follow button needs some margin $('.twitter-follow-button').css('margin-right', '6px'); });

$(function {     // open/close component groups      HRB.utils.djshook('component-group-opener').on('click', function { $(this).find('.group-parent-indicator').toggleClass('fa-plus-square-o').toggleClass('fa-minus-square-o').end.parent.toggleClass('open'); });   });

<script src="https://dka575ofm4ao0.cloudfront.net/assets/vendor/highstock.min-b3bdcc23987c58636d75f17ad2e2d72193ef4dbc1ec6f0d29402bbf59728cd91.js">

String.prototype.commafy = function { return this.replace(/(^|[^\w.])(\d{4,})/g, function($0, $1, $2) {       return $1 + $2.replace(/\d(?=(?:\d\d\d)+(?!\d))/g, "$&,");      }); }

Number.prototype.commafy = function { return String(this).commafy; }

$(function {     SP.currentPage.numberToDecimalPlaces = function(num, dec) {        if (dec == 0) {          return Math.round(num).commafy;        }

newnum = num.toFixed(dec) var finalValue;

// this gets rid of the 100.000% thing if (num == parseInt(newnum)) finalValue = Math.round(num); else finalValue = newnum;

return finalValue.commafy; }

SP.currentPage.getDataForTimePeriod = function(period) { $.ajax({           type: "GET",            // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with            // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees            url: "//trust.tes.com/metrics-display/vytc746nthwl/_.json".replace('_', period)          }).success(function(metricsDisplay, textStatus, xhr) {            var summary = metricsDisplay.summary             , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-vytc746nthwl');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Core Traffic. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Core Traffic for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Core Traffic "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'reqs/min');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-vytc746nthwl').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : false },         showLastLabel: true, tickPositions: [-0.01, 0.5, 1.01], min: -0.01, startOnTick: false, max: 1.01, endOnTick: false,

},

series : [ {     name : 'TES - Core Traffic', data : metricDataPoints['t8yrlzh1nzhj'], tooltip: { valueSuffix: 'reqs/min' },     enableMouseTracking : ($(window).outerWidth > 480) && false }

],

tooltip: { enabled: ($(window).outerWidth > 480) && false, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/50y30sfthfw6/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-50y30sfthfw6');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Authentication - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Authentication - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Authentication - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-50y30sfthfw6').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Authentication - Response Time', data : metricDataPoints['6c2v6trcz811'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/x90zclb75hc4/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-x90zclb75hc4');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Logged in Home - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Logged in Home - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Logged in Home - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-x90zclb75hc4').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40,

},

series : [ {     name : 'TES - Logged in Home - Response Time', data : metricDataPoints['421rcx6cj7jt'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/pwv5sb402k8f/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-pwv5sb402k8f');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Drupal - News/Resources/Store/Institute - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Drupal - News/Resources/Store/Institute - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Drupal - News/Resources/Store/Institute - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-pwv5sb402k8f').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Drupal - News/Resources/Store/Institute - Response Time', data : metricDataPoints['2wjx58ctb3mf'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/kvchb6c4n56v/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-kvchb6c4n56v');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resource Detail Page - Requests. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resource Detail Page - Requests for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resource Detail Page - Requests "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'reqs/min');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-kvchb6c4n56v').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : false },         showLastLabel: true, tickPositions: [-0.01, 0.5, 1.01], min: -0.01, startOnTick: false, max: 1.01, endOnTick: false,

},

series : [ {     name : 'TES - Resource Detail Page - Requests', data : metricDataPoints['k8dl5y6sqqd9'], tooltip: { valueSuffix: 'reqs/min' },     enableMouseTracking : ($(window).outerWidth > 480) && false }

],

tooltip: { enabled: ($(window).outerWidth > 480) && false, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/t32wzjy6dw8f/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-t32wzjy6dw8f');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resource Detail Page - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resource Detail Page - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resource Detail Page - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-t32wzjy6dw8f').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Resource Detail Page - Response Time', data : metricDataPoints['qcsq0hrv8jn3'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/b6nmwrm2y57h/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-b6nmwrm2y57h');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resource Reviews - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resource Reviews - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resource Reviews - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-b6nmwrm2y57h').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Resource Reviews - Response Time', data : metricDataPoints['p6xml447n5wb'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/536pyq31tdcr/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-536pyq31tdcr');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resource Search - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resource Search - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resource Search - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-536pyq31tdcr').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Resource Search - Response Time', data : metricDataPoints['f7zfjjxfc3jc'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/tpppyyrqj38c/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-tpppyyrqj38c');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resources - Payment Gateway - Requests. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resources - Payment Gateway - Requests for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resources - Payment Gateway - Requests "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'reqs/min');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-tpppyyrqj38c').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : false },         showLastLabel: true, tickPositions: [-0.01, 0.5, 1.01], min: -0.01, startOnTick: false, max: 1.01, endOnTick: false,

},

series : [ {     name : 'TES - Resources - Payment Gateway - Requests', data : metricDataPoints['6b0rgyt5jvlz'], tooltip: { valueSuffix: 'reqs/min' },     enableMouseTracking : ($(window).outerWidth > 480) && false }

],

tooltip: { enabled: ($(window).outerWidth > 480) && false, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/6m19g1rntmm5/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-6m19g1rntmm5');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Resources - Payment Gateway - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Resources - Payment Gateway - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Resources - Payment Gateway - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-6m19g1rntmm5').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Resources - Payment Gateway - Response Time', data : metricDataPoints['skwhsfylj7q9'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/hfwpq5d71p7c/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-hfwpq5d71p7c');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Job Detail Page - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Job Detail Page - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Job Detail Page - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-hfwpq5d71p7c').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40,

},

series : [ {     name : 'TES - Job Detail Page - Response Time', data : metricDataPoints['x6dyk4zv0w0m'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/2rpj8flg61n2/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-2rpj8flg61n2');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Job Application - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Job Application - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Job Application - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-2rpj8flg61n2').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40,

},

series : [ {     name : 'TES - Job Application - Response Time', data : metricDataPoints['6zzdnv7w5qmj'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/fdwn57w7j4pw/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-fdwn57w7j4pw');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - School Portal - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - School Portal - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - School Portal - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-fdwn57w7j4pw').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - School Portal - Response Time', data : metricDataPoints['z2gs6g7hst5j'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/fw0fy5psjcq2/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-fw0fy5psjcq2');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for THE/WUR - Drupal - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for THE/WUR - Drupal - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. THE/WUR - Drupal - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-fw0fy5psjcq2').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'THE/WUR - Drupal - Response Time', data : metricDataPoints['dy5gf89bnmmj'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/6yt6g8v2wzz0/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-6yt6g8v2wzz0');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - User profile - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - User profile - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - User profile - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-6yt6g8v2wzz0').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40,

},

series : [ {     name : 'TES - User profile - Response Time', data : metricDataPoints['6lczhf66tfty'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/4lgr05nkfpnt/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-4lgr05nkfpnt');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Community - Overall Traffic. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Community - Overall Traffic for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Community - Overall Traffic "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'req');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-4lgr05nkfpnt').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Community - Overall Traffic', data : metricDataPoints['6rv0lqy48cnj'], tooltip: { valueSuffix: 'req' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});         $.ajax({ type: "GET", // this line must be end up with "//status.*" type of URLs (no protocol, just leading slashes). customers use SSL through us or by offloading with // cloudflare or something like it and the request.protocol the server sees is different than what the browser sees url: "//trust.tes.com/metrics-display/5c288pqs3jcj/_.json".replace('_', period) }).success(function(metricsDisplay, textStatus, xhr) { var summary = metricsDisplay.summary , $metricSummaryLabel = HRB.utils.djshook('metrics-display-current-5c288pqs3jcj');

var errorMsg = null;

if(summary === "unavailable") { errorMsg = 'We\'re having issues retrieving data for TES - Community - Response Time. ';           } else if(summary) { // we need to do a basic check to make sure we have any data at all var hasDataRollupsAvailable = false; for(var h = 0; h < metricsDisplay.metrics.length; h++) { if(metricsDisplay.metrics[h].data.length > 0) { hasDataRollupsAvailable = true; break; }             }              if(!hasDataRollupsAvailable) { errorMsg = "Oops! No data has been indexed for TES - Community - Response Time for this time period yet."; }           } else { errorMsg = "Failed to load. TES - Community - Response Time "; }

if(errorMsg !== null) { $graphContainer = $metricSummaryLabel.parent.next; $graphContainer.html(' ' + errorMsg + ' ').parent.find('.metric-meta').remove; $graphContainer.removeAttr("style"); return; }

$metricSummaryLabel.parent.next.show;

// proceed since we have data $metricSummaryLabel.text(SP.currentPage.numberToDecimalPlaces(summary['mean'], 0 ) + 'ms');

var metricDataPoints = {} , intervalMsec = metricsDisplay.period.interval * 1000;

var startingBucketMsec = parseInt((new Date).getTime / intervalMsec) * intervalMsec;

for(var h = 0; h < metricsDisplay.metrics.length; h++) { metricDataPoints[metricsDisplay.metrics[h].metric.id] = [] var data = metricsDisplay.metrics[h].data , currentBucketMsec = startingBucketMsec;

for(var i = metricsDisplay.period.count; i > 0; i--) { // loop over the data and pull out the data point with the following characteristics // -> closest to currentBucketMsec // -> without being greater than currentMsecBucket // -> without being more than 1 intervalMsec bucket away var valueToUse = null; for(var j = data.length - 1; j >= 0; j--) { var currentTimestampMsec = data[j].timestamp * 1000; if(currentTimestampMsec <= currentBucketMsec && currentTimestampMsec > (currentBucketMsec - intervalMsec)) { valueToUse = data[j].value; // console.log("Using ts:" + currentTimestampMsec + " with value:" + valueToUse + " for bucket:" + currentBucketMsec); break; }               }

// local time var offset = -1 * (new Date).getTimezoneOffset * 60 * 1000;

metricDataPoints[metricsDisplay.metrics[h].metric.id].push([currentBucketMsec + offset, valueToUse]) currentBucketMsec -= intervalMsec; }

metricDataPoints[metricsDisplay.metrics[h].metric.id].reverse; }

$('#metrics-display-graph-container-5c288pqs3jcj').highcharts('StockChart', {       plotOptions : {          series : {            animation : false,            color : '#97BF78',            connectNulls: false          },        },

chart : { backgroundColor: '#ffffff' },

title : { text: '', style: { display: 'none', }       },

credits : { enabled : false },

exporting : { enabled : false },

rangeSelector : { enabled : false },

scrollbar : { enabled : false },

navigator : { enabled : false },

xAxis: { gridLineColor : 'rgba(224,224,224,.8)', labels: { style : { color: '#AAAAAA' }         },          lineColor: '#E0E0E0', },

yAxis: { gridLineColor : 'rgba(224,224,224,.5)', labels: { style : { color: '#AAAAAA' },           enabled : true },         showLastLabel: true, tickPixelInterval: 40, min: 0.0, startOnTick: false,

},

series : [ {     name : 'TES - Community  - Response Time', data : metricDataPoints['g152bcxdb3hd'], tooltip: { valueSuffix: 'ms' },     enableMouseTracking : ($(window).outerWidth > 480) && true }

],

tooltip: { enabled: ($(window).outerWidth > 480) && true, valueDecimals: function(value) { var v = SP.currentPage.numberToDecimalPlaces(value, 0); if(v.indexOf('.') == -1) return 0; else return 0; },       }      });

});     }

var $timePeriodToggles = HRB.utils.djshook('data-time-period-toggle');

SP.currentPage.activeTimePeriodToggle = function(period) { $timePeriodToggles.removeClass('active'); $timePeriodToggles.filter('[data-time-period="' + period + '"]').addClass('active'); }

SP.currentPage.getAndDisplayInitialChartData = function { if (window.location.hash == '#week') { SP.currentPage.getDataForTimePeriod('week'); SP.currentPage.activeTimePeriodToggle('week'); }        else if (window.location.hash == '#month') { SP.currentPage.getDataForTimePeriod('month'); SP.currentPage.activeTimePeriodToggle('month'); }       else { SP.currentPage.getDataForTimePeriod('day'); SP.currentPage.activeTimePeriodToggle('day'); }     }

$timePeriodToggles.on('click', function {       var newPeriod = $(this).attr('data-time-period');

SP.currentPage.activeTimePeriodToggle(newPeriod); SP.currentPage.getDataForTimePeriod(newPeriod); window.location.hash = newPeriod;

return false; });

SP.currentPage.getAndDisplayInitialChartData; })

<script src="https://dka575ofm4ao0.cloudfront.net/packs/common-012472ff30cf0656e4f7.js"> <script src="https://dka575ofm4ao0.cloudfront.net/packs/globals-f49d4fd9830c30fcab02.js">

<script src="https://dka575ofm4ao0.cloudfront.net/assets/react_ujs-01c0ac06d0ec27d6d087274ad91ab292aceaeef536272c1acee75be149a350fd.js">

$(function { 	var $link = $(' <a href="http://www.statuspage.io/powered-by" target="_blank" class="color-secondary" rel="noopener noreferrer nofollow">Powered by Statuspage</a> ');

var setPoweredByStyles = function { if (!$('.powered-by').length) { $link.appendTo($('.page-footer')) } 		$('.powered-by').attr('style', 'display: inline !important; visibility:visible !important; opacity: 1 !important; position:static !important; text-indent:0px !important; transform:scale(1) !important'); }

setInterval(setPoweredByStyles, 1000); });