· 6 years ago · Feb 20, 2020, 09:26 PM
1// ==UserScript==
2// @name ttIntegratorBOM
3// @namespace tt.amazon.com
4// @description Adds commonly used DT sites as tabs to Remedy tt
5// @author jmad@; browd@
6// @version 0.42
7// @include https://tt.amazon.com/*
8
9// @exclude https://tt.amazon.com/relate-file*
10// @exclude https://tt.amazon.com/search*
11// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/1.5.2/jquery.min.js
12// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/jquery-ui-1.8.12.custom.js
13// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/jquery.ui.core.min.js
14// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/jquery.ui.widget.min.js
15// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/jquery.ui.mouse.min.js
16// @require https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/jquery.ui.position.min.js
17// @require https://improvement-ninjas.amazon.com/s3files/s3get.cgi/gm_jq_xhr.js
18// @require https://internal-cdn.amazon.com/dtux.amazon.com/javascripts/cache/dtux-style.js
19// @resource issue-severity.css https://internal-cdn.amazon.com/dtux.amazon.com/stylesheets/issue-severity.css
20// @resource jquery-ui.css https://internal-cdn.amazon.com/btk.amazon.com/ajax/libs/jquery/ui/1.8.12/themes/smoothness/jquery-ui-1.8.12.custom.css
21// @downloadURL https://firmware.corp.amazon.com/dco/gm/ttIntegrator.user.js
22// @updateURL https://firmware.corp.amazon.com/dco/gm/ttIntegrator.user.js
23// @grant GM_getValue
24// @grant GM_setValue
25// @grant GM_log
26// @grant GM_addStyle
27// @grant GM_getResourceText
28// @grant GM_xmlhttpRequest
29// @run-at document-end
30// ==/UserScript==
31//
32//----------========== Functional Description ==========----------
33//
34//----------========== Revision History ==========----------
35// 1. Initial Release
36// 2. General housekeeping
37// 3. Major Revision of tab functionality, tabs made OOP
38// Changed tab content to load on first click of the tab
39// to prevent arbitrary loading of content.
40// 4. Major revision
41// + Added options menu that uses DTUX styles for consistency
42// + Added dynamic tab display controls for all tabs
43// + Added refresh button for additional Tabs
44// + Added some cacheing for infra queries to speed things up
45// + Simplified HostName regex
46// + Updated Asset/HWID regexs to include SMIC identifiers
47// + Added DCO Ping tab for prod/xen hosts
48// + Did some general housekeeping
49// + Corrected iFrame sizing problems and enabled dynamic resizing
50// - Probably made some things more confusing
51// 5. Minor Bug Fixes
52// 6. Minor Bug Fix that prevented certain prod host related tabs from opening
53// 7. New Features
54// + Replaced DCO Ping for TOS Toaster
55// + Added Admiral Info Tab
56// + Added Admiral Rack View Tab
57// + HWMon tab for all hosts, PROD/EC2
58// + Parts History Tab
59// + U-Height Rack Tab
60// + Reordered tabs
61// 8. Remove old tabs, add new tab
62// + Removed Parts
63// + Removed U-Height
64// + Added UDDT
65// + Changed Infra API to UDDTAPI
66// 9. Regex ticket description for host info if hostname field is unknown.
67// 10. New Features
68// + Added network device based tabs
69// + Updated UDDTAPI to assist with network devices
70// + Changed ways filters are applied to tabs
71// 11. Add greasemonkey grants, Add missing clusters, Report version to API for usage stats, move gm_jq_xhr to S3.
72// 12. Add is-it-down script for UDDTAPI outages, Maybe even for announcements on TT.
73// 13. Bug fix
74// 14. EC2 Hostname Support
75// 15. Add fallback function, Support for per cluster URL's, Add greasemonkey built in auto update.
76// 16. Remove debug.
77// 17. Fix per cluster url support for network devices.
78// 18. Adding Logistics Tab for Tagging Automation see: https://w.amazon.com/index.php/User:Jmad/ttIntegrator
79// 19. Adding additional tags for Logistics
80// 20. Fixing hwmon2 API
81// 21. Fixing related tickets upload
82// 22. Changed cloudforge filter to Type:Host
83// 23. Added link to Logistics tag descriptions
84// 24. Added Mobility tabs for parts search and parts scanner
85// 25. Added support for fra, bjs and pdt admrial tabs. Added version to the UserScript config section.
86// 26. DCOPile Tab added, and bug fix.
87// 27. Tabs were not loading for /index-sql.fcgi pages, I added a redirect to normal pages.
88// + hwmon will now display time in a human readable form.
89// + Added a runbook tab for EBS, EC2, DBs and S3.
90// 28. Fixed bug that was not allowing the logistics tab to update tags.
91// 29. DCOSE-1511:
92// + VendorShort would not populate if the hwid was not set in the hostname field.
93// + Removed the makeSerialFromHWid function and moved contents to the HOST obj creation.
94// + Vendor short is not split directly from the retrieved hardwareId instead of the hostname field.
95// DCOSE-1419:
96// + Modifies the position of the tabs so that they are not overlapping when there are 2 rows.
97// + Note: the layout of the tabs and content panes is not correct and the width of the main div
98// is causing problems with the display. I think that DCOSE-1512 should address this issue.
99// 30. Added webkit support
100// 31. Fixed bug where unprintable characters were being parsed in the time
101// field when Jsonview extension is used.
102// 32. Added and seperated cloudforge tabs
103// 33. Addded Logistics tag per request
104// 34. Logistics tab renamed to GPC
105// 35. Fixed bug causing ttIntegrator to not load for Corp hosts.
106// 36. Updated logistics tags.
107// 37. Fixed bug when HostClass not returned.
108// 38. removes uddt and idn-tools as they've been deprecated - amurp@
109// + fixes dcopile tab url creation - kevmilk@
110// 39. ttIntegrator has been moved to the dcofw repo DCO-DT-Scripts package.
111// 40. created map for dcopile urls for SNX/ZT/FOX/QCI hosttypes - kevmilk@
112// 40.1 Fixes " . " in Voyager.14
113// 41. Adds host first_seen and Out of Warranty callout to IPS tab.
114// $Revision: #41 $
115// 42. Added JBL and addititional FOX reg
116
117//If the page is hwmon failure then change the epoch time to human readable.
118if ( document.location.hostname.match(/hwmon-global|hwmon-data/) )
119{
120 if($("#json").length == 0) {
121 json_text=$('pre').text().replace(/(.*)"time": (\d*)/g, function(match, p1, p2) {return p1 + '"time": '+ new Date(parseInt(p2)*1000).toUTCString()});
122 console.log(json_text);
123 $('pre').text(json_text);
124 } else {
125
126 var element_list = document.getElementsByClassName('num');
127 for (var element = 0; element < element_list.length; element++) {
128 element_list[element].previousElementSibling.getAttribute('title').match("<root>.time") ?
129 element_list[element].innerHTML = new Date(parseInt(element_list[element].innerHTML.replace(/[^\x20-\x7E]+/g, ''))*1000).toUTCString(): false
130 }
131 }
132}
133
134
135
136//If the URL is "index-sql.fcgi?case_id=" redirect to normal ticket page.
137
138var case_id;
139var description;
140var status;
141var impact;
142var category;
143var type;
144var item;
145var assigned_group;
146var assigned_individual;
147var host_name;
148
149(function () {
150 var case_id = $('#case_id').val();
151 location.search.match(/(case_id)/)? document.location.replace(case_id) : false ;
152})();
153
154(function() {
155
156 var xmlhttp;
157 if (window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
158 xmlhttp = new XMLHttpRequest();
159 }
160 else { // code for IE6, IE5
161 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
162 }
163 xmlhttp.onreadystatechange = function() {
164 if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
165 document.getElementById("myDiv").innerHTML = xmlhttp.responseText;
166 }
167 }
168 xmlhttp.open("GET", "https://dco.amazon.com/part_history?hwid=JBL.114839444000087&enable_partless_tickets=False", true);
169 xmlhttp.send();
170
171
172
173
174 gmLog('Init', '');
175 var NAME = 'ttIntegrator';
176 var VERSION = parseInt(/\d+/.exec(' $Revision: #41 $ '));
177 var HOST = new hashTable();
178 var TT = new hashTable();
179 var tabIndex = new Array();
180 var domTimer = Math.round((new Date()).getTime()/1000);
181 // var pop = new notification();
182
183 /* --- JqueryUI CSS --- */
184 var jqueryCss = GM_getResourceText('jquery-ui.css');
185 GM_addStyle(jqueryCss);
186
187 /* --- Debug on/off --- */
188 var debug_enabled = false;
189 var debug_default = 'function';
190
191 /* --- Global Vars --- */
192 var viewing_queue = false;
193 var suppress_header = true;
194 var options_showing = 0;
195 var post_init = 0;
196 var iaws_fallback = 0;
197
198 var loc = "" + document.location;
199
200 gmLog('Init Tabs', '');
201
202 /* --- Tab Functions --- */
203 var infraTab = new makeTab(tabIndex);
204 var mobilityPartsTab = new makeTab(tabIndex);
205 var mobilityPartsSearchTab = new makeTab(tabIndex);
206 var cloudforgehwTab = new makeTab(tabIndex);
207 var cloudforgeconsoleTab = new makeTab(tabIndex);
208 var cloudforgelogsTab = new makeTab(tabIndex);
209 var ec2consoleTab = new makeTab(tabIndex);
210 var monitorportalTab = new makeTab(tabIndex);
211 var rackinfoTab = new makeTab(tabIndex);
212 var admiralrackTab = new makeTab(tabIndex);
213 var apolloTab = new makeTab(tabIndex);
214 var toasterTab = new makeTab(tabIndex);
215 var hwmonTab = new makeTab(tabIndex);
216 var admiralTab = new makeTab(tabIndex);
217 var netLocalTab = new makeTab(tabIndex);
218 var infraSwitchTab = new makeTab(tabIndex);
219 var admiralSwitchTab = new makeTab(tabIndex);
220 var toasterSwitchTab = new makeTab(tabIndex);
221 var consoleDBTab = new makeTab(tabIndex);
222 var logisticsTab = new makeTab(tabIndex);
223 var dcopileTab = new makeTab(tabIndex);
224 var runbookTab = new makeTab(tabIndex);
225 //Tabs Tyler's added
226 var bomFailureTab = new makeTab(tabIndex);
227 var hostRecordTab = new makeTab(tabIndex);
228 var partHistoryTab = new makeTab(tabIndex);
229 var tavernTab = new makeTab(tabIndex);
230 var ipaTab = new makeTab(tabIndex);
231 var saisonTab = new makeTab(tabIndex);
232 var tripelTab = new makeTab(tabIndex);
233 var boostTab = new makeTab(tabIndex);
234 // var playgroundTab = new makeTab(tabIndex);
235
236 gmLog('Define Tabs', '');
237
238 infraTab.configTab( 'host details',
239 'https://infrastructure.amazon.com/automation/hostDetails.cgi?search_type=auto&show_buildstate=on&show_build=on&show_host_audit_log=on&show_reboots=on&show_ticket_log=on&q=',
240 'HardwareId',
241 'Host Details',
242 'iframe'
243 );
244 mobilityPartsTab.configTab( 'mobility parts',
245 'https://mobility.amazon.com/scanner/parts.html',
246 'Null',
247 'Mobility Parts Scanner',
248 'iframe'
249 );
250 mobilityPartsSearchTab.configTab( 'mobility search',
251 'https://mobility.amazon.com/part/search',
252 'Null',
253 'Mobility Parts Search',
254 'iframe'
255 );
256 cloudforgehwTab.configTab('cloudforge hw',
257 'https://cloudforge-%CLUSTER%-ro.amazon.com/servers?hardware_id=',
258 'HardwareId',
259 'CF HW',
260 'iframe'
261 );
262 cloudforgeconsoleTab.configTab('cloudforge console',
263 'https://cloudforge-%CLUSTER%-ro.amazon.com/consoles?hardware_id=',
264 'HardwareId',
265 'CF Console',
266 'iframe'
267 );
268 cloudforgelogsTab.configTab('cloudforge logs',
269 'https://cloudforge-%CLUSTER%-ro.amazon.com/show_logs?type=server&path=',
270 'HardwareId',
271 'CF Logs',
272 'iframe'
273 );
274 ec2consoleTab.configTab('ec2 console',
275 'https://services-%CLUSTER%.ec2.amazon.com/cgi-bin/mis/hosts_by_serial.rb?serial=',
276 'SerialNumber',
277 'EC2 Console',
278 'iframe'
279 );
280 monitorportalTab.configTab( 'monitor portal',
281 'https://monitorportal.amazon.com/hosts/overview?&name=',
282 'HostName',
283 'Monitor Portal',
284 'iframe'
285 );
286 rackinfoTab.configTab( 'rack info',
287 'https://infrastructure.amazon.com/automation/locationBrowser.cgi?location_id=',
288 'RackAssetId',
289 'Rack',
290 'iframe'
291 );
292 admiralrackTab.configTab( 'admiral rack',
293 'https://admiral-%CLUSTER%.ec2.amazon.com/fleet?q=rack:',
294 'RackAssetId',
295 'Admiral Rack',
296 'iframe'
297 );
298 apolloTab.configTab('apollo info',
299 'https://apollo.amazon.com/hosts/',
300 'HostName',
301 'Apollo',
302 'iframe'
303 );
304 toasterTab.configTab('toaster ping',
305 'https://toaster.amazon.com/cgi-bin/toaster.cgi?host=',
306 'HardwareId',
307 'Toaster',
308 'iframe'
309 );
310 hwmonTab.configTab('hwmon failures',
311 'https://hwmon-global.amazon.com/failures/',
312 'HardwareId',
313 'HWMon',
314 'iframe'
315 );
316 admiralTab.configTab( 'admiral info',
317 'https://admiral-%CLUSTER%.ec2.amazon.com/host/',
318 'IpAddr',
319 'Admiral',
320 'iframe'
321 );
322 netLocalTab.configTab( 'net local',
323 'https://netlocal.amazon.com/?view=search&searchvalid=searchvaild&searchname=',
324 'Device',
325 'Network Locator',
326 'iframe'
327 );
328 infraSwitchTab.configTab( 'infra switch',
329 'https://infrastructure.amazon.com/automation/switchViewer.cgi?type=switch&network_space=amazon&switch=',
330 'Device',
331 'Switch Viewer',
332 'iframe'
333 );
334 admiralSwitchTab.configTab( 'admiral switch',
335 'https://admiral-%CLUSTER%.ec2.amazon.com/fleet?q=',
336 'Device',
337 'Admiral',
338 'iframe'
339 );
340 toasterSwitchTab.configTab( 'toaster switch',
341 'https://toaster.amazon.com/cgi-bin/tractor.cgi?switch=',
342 'Device',
343 'Toaster',
344 'iframe'
345 );
346 consoleDBTab.configTab( 'console db',
347 'https://consoledbplus.amazon.com/prod/consoledb/index.php?format=xml&nettype=prod&exact=yes&submit=submit&hostname=',
348 'Device',
349 'ConsoleDB+',
350 'iframe'
351 );
352 logisticsTab.configTab( 'logistics tags',
353 'Null',
354 'Null',
355 'IPS',
356 'logistics'
357 );
358 dcopileTab.configTab( 'dcopile pages',
359 'NULL',
360 'Null',
361 'DCOPile',
362 'iframe'
363 );
364 runbookTab.configTab( 'runbook wiki',
365 'https://w.amazon.com/index.php/DCOSE/Documentation/Runbooks/',
366 'Service',
367 'Runbook',
368 'iframe'
369 );
370 //Tabs Tyler's added
371 bomFailureTab.configTab('bom failure',
372 'https://hwmon-global.amazon.com/bom_failures/',
373 'HardwareId',
374 'BOM Failure',
375 'iframe'
376 );
377 hostRecordTab.configTab('host record',
378 'https://hwmon-global.amazon.com/host_record/',
379 'HardwareId',
380 'Host Record',
381 'iframe'
382 );
383 partHistoryTab.configTab('part history',
384 'HardwareId',
385 'HardwareId',
386 'Part History',
387 'iframe'
388 );
389 tavernTab.configTab('tavern tab',
390 'https://tavern.corp.amazon.com',
391 'null',
392 'Tavern Tab',
393 'iframe'
394 );
395 ipaTab.configTab('ipa tab',
396 'https://tavern.corp.amazon.com',
397 'null',
398 'BOM List Tab',
399 'iframe'
400 );
401 saisonTab.configTab('saison tab',
402 'https://tavern.corp.amazon.com',
403 'null',
404 'Sel Logs Tab',
405 'iframe'
406 );
407 tripelTab.configTab('tripel tab',
408 'https://tavern.corp.amazon.com/tripel?api=false&host_id=',
409 'HardwareId',
410 'Tripel Tab',
411 'iframe'
412 );
413 boostTab.configTab('boost tab',
414 'null',
415 'null',
416 'Boost Tab',
417 'iframe'
418 );
419 /* playgroundTab.configTab('play ground', //has to be 2 words
420 'null',
421 'null',
422 'Playground!',
423 'blank'
424 );
425 */
426
427 gmLog('Template Tabs', '');
428
429 // Template: {"parent": "", "inputName": "", "inputType": "", "display": "", "elementId": "", "filter": "", "key": ""},
430 var dT = {"tabs": [
431 {"parent": "Tabs", "inputName": "hostDetails", "inputType": "checkbox", "display": "Enable Host Details", "elementId": "tab_host_details", "filter": "Type", "key": "Host"},
432 {"parent": "Tabs", "inputName": "mobilityParts", "inputType": "checkbox", "display": "Enable Mobility Parts Scanner", "elementId": "tab_mobility_parts", "filter": "none", "key": ""},
433 {"parent": "Tabs", "inputName": "mobilityPartsSearch", "inputType": "checkbox", "display": "Enable Mobility Parts Search", "elementId": "tab_mobility_search", "filter": "none", "key": ""},
434 {"parent": "Tabs", "inputName": "cloudForgehw", "inputType": "checkbox", "display": "Enable CloudForge HW", "elementId": "tab_cloudforge_hw", "filter": "Type", "key": "Host"},
435 {"parent": "Tabs", "inputName": "cloudForgeconsole", "inputType": "checkbox", "display": "Enable CloudForge Console", "elementId": "tab_cloudforge_console", "filter": "Type", "key": "Host"},
436 {"parent": "Tabs", "inputName": "cloudForgelogs", "inputType": "checkbox", "display": "Enable CloudForge Logs", "elementId": "tab_cloudforge_logs", "filter": "Type", "key": "Host"},
437 {"parent": "Tabs", "inputName": "ec2Console", "inputType": "checkbox", "display": "Enable EC2 Console", "elementId": "tab_ec2_console", "filter": "Fabric", "key": "ec2"},
438 {"parent": "Tabs", "inputName": "rackinfo", "inputType": "checkbox", "display": "Enable Rack Info", "elementId": "tab_rack_info", "filter": "Type", "key": "Host"},
439 {"parent": "Tabs", "inputName": "admiralrack", "inputType": "checkbox", "display": "Enable Admiral Rack", "elementId": "tab_admiral_rack", "filter": "Fabric", "key": "ec2"},
440 {"parent": "Tabs", "inputName": "apollo", "inputType": "checkbox", "display": "Enable Apollo", "elementId": "tab_apollo_info", "filter": "Fabric", "key": "production"},
441 {"parent": "Tabs", "inputName": "monitorPortal", "inputType": "checkbox", "display": "Enable Monitor Portal", "elementId": "tab_monitor_portal", "filter": "Fabric", "key": "production"},
442 {"parent": "Tabs", "inputName": "toaster", "inputType": "checkbox", "display": "Enable Toaster", "elementId": "tab_toaster_ping", "filter": "Fabric", "key": "Host"},
443 {"parent": "Tabs", "inputName": "hwmon", "inputType": "checkbox", "display": "Enable HWMon", "elementId": "tab_hwmon_failures", "filter": "Type", "key": "Host"},
444 {"parent": "Tabs", "inputName": "admiral", "inputType": "checkbox", "display": "Enable Admiral", "elementId": "tab_admiral_info", "filter": "Fabric", "key": "ec2"},
445 {"parent": "Tabs", "inputName": "netLocal", "inputType": "checkbox", "display": "Enable Network Locator", "elementId": "tab_net_local", "filter": "Type2", "key": "Net"},
446 {"parent": "Tabs", "inputName": "infraSwitch", "inputType": "checkbox", "display": "Enable Switch Viewer", "elementId": "tab_infra_switch", "filter": "Type", "key": "Switch"},
447 {"parent": "Tabs", "inputName": "admiralSwitch", "inputType": "checkbox", "display": "Enable Admiral Switch", "elementId": "tab_admiral_switch", "filter": "Type2", "key": "Net"},
448 {"parent": "Tabs", "inputName": "toasterSwitch", "inputType": "checkbox", "display": "Enable Toaster Switch", "elementId": "tab_toaster_switch", "filter": "Type", "key": "Switch"},
449 {"parent": "Tabs", "inputName": "consoleDB", "inputType": "checkbox", "display": "Enable ConsoleDB+", "elementId": "tab_console_db", "filter": "Type2", "key": "Net"},
450 {"parent": "Tabs", "inputName": "ttOverview", "inputType": "checkbox", "display": "Enable Overview", "elementId": "tab_overview", "filter": "none", "key": ""},
451 {"parent": "Tabs", "inputName": "ttCorrespondence", "inputType": "checkbox", "display": "Enable Correspondence", "elementId": "tab_correspondence", "filter": "none", "key": ""},
452 {"parent": "Tabs", "inputName": "ttWorkLog", "inputType": "checkbox", "display": "Enable Work Log", "elementId": "tab_work_log", "filter": "none", "key": ""},
453 {"parent": "Tabs", "inputName": "ttEmail", "inputType": "checkbox", "display": "Enable Email", "elementId": "tab_cc_list", "filter": "none", "key": ""},
454 {"parent": "Tabs", "inputName": "ttRelatedItems", "inputType": "checkbox", "display": "Enable Related Items", "elementId": "tab_related_items", "filter": "none", "key": ""},
455 {"parent": "Tabs", "inputName": "ttAuditTrail", "inputType": "checkbox", "display": "Enable Audit Trail", "elementId": "tab_audit_trail", "filter": "none", "key": ""},
456 {"parent": "Tabs", "inputName": "logisticsTab", "inputType": "checkbox", "display": "Enable Logistics Tab", "elementId": "tab_logistics_tags", "filter": "none", "key": ""},
457 {"parent": "Tabs", "inputName": "dcopileTab", "inputType": "checkbox", "display": "Enable DCOPile Tab", "elementId": "tab_dcopile_pages", "filter": "Type", "key": "Host"},
458 {"parent": "Tabs", "inputName": "runbookTab", "inputType": "checkbox", "display": "Enable Runbook Tab", "elementId": "tab_runbook_wiki", "filter": "Service", "key": ""},
459 //Tabs Tyler's added
460 {"parent": "Tabs", "inputName": "bomFailureTab", "inputType": "checkbox", "display": "Enable BOM Failure Tab", "elementId": "tab_bom_failure", "filter": "Type", "key": "Host"},
461 {"parent": "Tabs", "inputName": "hostRecordTab", "inputType": "checkbox", "display": "Enable Host Record Tab", "elementId": "tab_host_record", "filter": "Type", "key": "Host"},
462 {"parent": "Tabs", "inputName": "partHistoryTab", "inputType": "checkbox", "display": "Enable Part History Tab", "elementId": "tab_part_history", "filter": "Type", "key": "Host"},
463 {"parent": "Tabs", "inputName": "tavernTab", "inputType": "checkbox", "display": "Enable Tavern Tab", "elementId": "tab_tavern_tab", "filter": "Type", "key": "Host"},
464 {"parent": "Tabs", "inputName": "ipaTab", "inputType": "checkbox", "display": "Enable BOM List Tab", "elementId": "tab_ipa_tab", "filter": "Type", "key": "Host"},
465 {"parent": "Tabs", "inputName": "saisonTab", "inputType": "checkbox", "display": "Enable SEL Logs Tab", "elementId": "tab_saison_tab", "filter": "Type", "key": "Host"},
466 {"parent": "Tabs", "inputName": "vultureTab", "inputType": "checkbox", "display": "Enable Tripel Tab", "elementId": "tab_tripel_tab", "filter": "Type", "key": "Host"},
467 {"parent": "Tabs", "inputName": "boostTab", "inputType": "checkbox", "display": "Enable Boost Tab", "elementId": "tab_boost_tab", "filter": "Type", "key": "Host"}
468
469 ]
470 };
471 // {"parent": "Tabs", "inputName": "myPlayground", "inputType": "checkbox", "display": "Enable Playground", "elementId": "tab_play_ground", "filter": "none", "key": ""}
472
473 gmLog('Init Options', '');
474
475 var menu = new optionsMenu(dT);
476
477 gmLog('Init Env', '');
478
479 /* --- Build ENV from ticket --- */
480 case_id = $('#case_id').val();
481 description = $('div',$('div#context_bar/table/tbody/td/div[@title].')).text().trim();
482 status = $('select#status').val();
483 impact = $('select#impact').val();
484 category = $('select#category').val();
485 type = $('select#type').val();
486 item = $('select#item').val();
487 assigned_group = $('select#assigned_group').val();
488 assigned_individual = $('select#assigned_individual').val();
489 host_name = $('input#hostname').val();
490 regexHostname(host_name);
491 if ( hostnameType == "unknown" )
492 {
493 host_name = description;
494 }
495
496 //Host information
497 var hostnameType;
498 var hostnameValue;
499 var serial;
500 var prodHid;
501 var fieldIaws = new Array();
502 var valueIaws = new Array();
503 var iaws = 'http://infauto-services.amazon.com/HostService/?Action=GetHostInfo&ReturnAttribute=ALL&'
504
505 gmLog('Init Done', '');
506
507 function regexHostname (name)
508 {
509 gmLog('regexHostname' + name, '');
510
511 var servernameRE=/\b((\w(\w|-)+\.)+((iad|sea|dub|sfo|pdx|pdt|lux|sin|nrt|gru|pek|syd|bjs)+(\d){1,2})|(vdc))|(\w(\w|-)+\.)+(aes0.internal)\b/i;
512 var hwidRE=/\b(((RS\.)+(\w|\d){8})|((ZT\.)+(\d){12})|((HP\.)+(\w|\d){10})|((DELL\.)+(\w|\d){7}))|(((R)+(\d){6})|((1101)+(\d){6}))|((SMIC\.)+(\w|\d){16})|((SMIC\.)+(\w|\d){14})|((QCI\.)+(\w|\d){13})|((SNX\.)+(\w|\d){16})|((SNX\.)+(\w|\d){9})|((JBL\.)+(\w|\d){6})|((FOX\.)+(\w|\d){6})|((FOX\.)+(\w|\d){12})\b/i;
513 var assetidRE=/\b(((R)+(\d){6})|((1101)+(\d){6})|((640)+(\d){7})|((97)+(\d){4})|((3301)+(\d){6})|((70)+(\d){4})|((9901)+(\d){6}))|((840)+(\d){7})\b/i;
514 var networkRE=/\b((vdc|((iad|sea|dub|sfo|pdx|pdt|lux|sin|nrt|gru|pek|syd|vdc|bjs)+(\d){1,}))+(\-)+(acs|br|co|coi|col|dw|es|en|external|lb|np|oob|oobn|svc|tn|vc|vo|ws|wdm|(pod)(\d){1,}|(\d){1,})+(\-)+([a-zA-Z0-9\-]){1,})\b/i;
515 var switchRE=/\b(((acc-sw)+(-)+([0-9\-]){1,})|((es-acc-rsw)+(-)+([0-9\-]){1,}))\b/i;
516 var servername=(servernameRE.exec(name) != null);
517 var hwid=(hwidRE.exec(name) != null);
518 var assetid=(assetidRE.exec(name) != null);
519 var networkname=(networkRE.exec(name) != null);
520 var switchname=(switchRE.exec(name) != null);
521 if ( servername === true )
522 {
523 hostnameType="HostName";
524 hostnameValue=name;
525 }
526 else if ( hwid === true )
527 {
528 hostnameType="HardwareId";
529 hostnameValue=name;
530 console.log(hostnameValue);
531 }
532 else if ( assetid === true )
533 {
534 hostnameType="AssetId";
535 hostnameValue=name;
536 }
537 else if ( networkname === true )
538 {
539 hostnameType="NetworkName";
540 hostnameValue=name;
541 }
542 else if ( switchname === true )
543 {
544 hostnameType="SwitchName";
545 hostnameValue=name;
546 }
547 else
548 {
549 hostnameType="unknown";
550 hostnameValue="unknown";
551 }
552 }
553
554 /* --- Auto Expand More Info field --- */
555 // Name - Class name you want
556 // Style - Style to apply, block for show, none for hide
557 function toggleElementByClass (name, style)
558 {
559 var myLog = arguments.callee.toString();
560 gmLog(myLog, debug_default);
561 var allHTMLTags = new Array();
562 var allHTMLTags = document.getElementsByTagName("*");
563 for (i=0; i<allHTMLTags.length; i++)
564 {
565 if (allHTMLTags[i].className===name)
566 {
567 allHTMLTags[i].style.display=style;
568 }
569 }
570 }
571
572 function toggleElementById (id, style)
573 {
574 var myLog = arguments.callee.toString();
575 gmLog(myLog, debug_default);
576 var myToggle = document.getElementById(id);
577 myToggle.style.display=style;
578 }
579
580 function runTabs ()
581 {
582 gmLog('runTabs' + post_init, '');
583 if ( post_init === 1 )
584 {
585 infraTab.setLoad(HOST);
586 mobilityPartsTab.setLoad(HOST);
587 mobilityPartsSearchTab.setLoad(HOST);
588 hwmonTab.setLoad(HOST);
589 toasterTab.setLoad(HOST);
590 admiralTab.setLoad(HOST);
591 cloudforgehwTab.setLoad(HOST);
592 cloudforgeconsoleTab.setLoad(HOST);
593 cloudforgelogsTab.setLoad(HOST);
594 ec2consoleTab.setLoad(HOST);
595 apolloTab.setLoad(HOST);
596 monitorportalTab.setLoad(HOST);
597 rackinfoTab.setLoad(HOST);
598 admiralrackTab.setLoad(HOST);
599 netLocalTab.setLoad(HOST);
600 infraSwitchTab.setLoad(HOST);
601 admiralSwitchTab.setLoad(HOST);
602 toasterSwitchTab.setLoad(HOST);
603 consoleDBTab.setLoad(HOST);
604 logisticsTab.setLoad(HOST);
605 dcopileTab.setLoad(HOST);
606 runbookTab.setLoad(HOST);
607 //Tabs Tyler's added
608 bomFailureTab.setLoad(HOST);
609 hostRecordTab.setLoad(HOST);
610 partHistoryTab.setLoad(HOST);
611 tavernTab.setLoad(HOST);
612 ipaTab.setLoad(HOST);
613 saisonTab.setLoad(HOST);
614 tripelTab.setLoad(HOST);
615 boostTab.setLoad(HOST);
616 // playgroundTab.setLoad(HOST);
617
618
619
620 }
621 }
622
623 function getFromOtherDom()
624 {
625 gmLog('getFromOtherDom' + hostnameValue, '');
626 var url2 = iaws + hostnameType + '=' + hostnameValue;
627 GM_xmlhttpRequest({
628 method: 'GET',
629 url: url2,
630 headers: {
631 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
632 'Accept': 'application/atom+xml,application/xml,text/xml',
633 },
634 onreadystatechange: function(response) {
635 if (response.readyState === 4) {
636 if (response.status === 200) {
637 iaws_fallback = 1;
638 getFromOtherDomParser(response);
639 postInit();
640
641 } else {
642 post_init = 2;
643 }
644 }
645 }
646 });
647
648 gmLog('Exit getFromOtherDom', '');
649 }
650
651 function getFromOtherDomParser(response)
652 {
653 gmLog('getFromOtherDomParser', '');
654 var text = response.responseText;
655 var myNodes = new Array();
656 if (window.DOMParser)
657 {
658 parser=new DOMParser();
659 xmlDoc=parser.parseFromString(text, "text/xml");
660 myNodes = xmlDoc.getElementsByTagName("*")[0].childNodes[1].childNodes[0].childNodes;
661 for (i=0;i<myNodes.length;i++)
662 {
663 var key = myNodes[i].nodeName;
664 var value;
665 try
666 {
667 value = myNodes[i].childNodes[0].nodeValue;
668 }
669 catch(err)
670 {
671 value = 'undefined';
672 }
673 console.log("key: "+key +" value: "+ value);
674 HOST.setItem(key, value);
675 }
676 if (HOST.getItem('Fabric') == 'ec2') {
677 if (HOST.getItem('ServerType').search(/ebsflash|ebsstore|skagit/i)==0) {
678 HOST.setItem('Service', 'EBS');
679 } else {
680 HOST.setItem('Service', 'EC2');
681 }
682 // 0.35 Adding if Fabric == Prod. As CORP doesn't have HostClass field and .search will bomb out. @ddavidr
683 // 0.36 https://tt.amazon.com/0120956149 key: HostClassName value: AWS-NLB-ONDECK-HANDOFF
684 // instead of HostClass. Which caused failure. Added "HOST.getItem('HostClass') &&" to confirmed key exists.
685 } else if (HOST.getItem('Fabric') == 'Prod') {
686 if (HOST.getItem('HostClass') && HOST.getItem('HostClass').search(/^S3-PROD/)==0) {
687 HOST.setItem('Service', 'S3');
688 }
689 if (HOST.getItem('HostName').search(/^db-/)==0) {
690 HOST.setItem('Service', 'DB');
691 }
692 }
693 var hostnameSplit = HOST.getItem('HardwareId').split(".");
694 serial = hostnameSplit[1];
695 HOST.setItem('SerialNumber', serial);
696 HOST.setItem('VendorShort', hostnameSplit[0]);
697 }
698
699 }
700
701 function gmLog(message, type)
702 {
703 if (debug_enabled===true)
704 {
705 if (type === 'function')
706 {
707 var myLog = message.substr('function '.length);
708 myLog = myLog.substr(0, myLog.indexOf('('));
709 GM_log(myLog);
710 console.log(myLog);
711 }
712 else
713 {
714 GM_log(message);
715 console.log(message);
716 }
717 }
718 }
719
720 function initAll ()
721 {
722 gmLog('initAll', '');
723 if ( loc.match(/tt.amazon.com\/[\dE]\d{4,}/) )
724 {
725 viewing_queue = false;
726 toggleElementByClass('more_information', 'block');
727 regexHostname(host_name);
728 getFromOtherDom()
729 runTabs();
730
731 //set the height of the tabstrip. the box is all messed up on this page.
732 $('div#tabstrip ul.ui-tabs-nav').css({'height':'50px'});
733 }
734 }
735
736
737 function postInit ()
738 {
739 gmLog('postInit' + post_init, '');
740 if ( post_init === 2 )
741 {
742
743 for (i=0;i<tabIndex.length;i++)
744 {
745 toggleElementById(tabIndex[i], 'none');
746 }
747
748 }
749 else if ( post_init === 0 )
750 {
751 post_init = 1;
752 runTabs();
753 menu.displayTabs(HOST, iaws_fallback);
754
755
756
757 }
758
759 console.log('Main function is done... Running the resync tabs.');
760 var s = document.createElement('script');
761 s.type="text/javascript";
762 s.innerHTML = '$("#tabstrip ul.ui-tabs-nav").tabs(); $("div#tabstrip ul.ui-tabs-nav").css({"font-family":"arial", "color":"#27537a"});';
763 document.body.appendChild(s);
764
765 }
766
767 infraTab.insertTab(HOST);
768 hwmonTab.insertTab(HOST);
769 toasterTab.insertTab(HOST);
770 admiralTab.insertTab(HOST);
771 cloudforgehwTab.insertTab(HOST);
772 cloudforgeconsoleTab.insertTab(HOST);
773 cloudforgelogsTab.insertTab(HOST);
774 ec2consoleTab.insertTab(HOST);
775 apolloTab.insertTab(HOST);
776 monitorportalTab.insertTab(HOST);
777 rackinfoTab.insertTab(HOST);
778 admiralrackTab.insertTab(HOST);
779 netLocalTab.insertTab(HOST);
780 infraSwitchTab.insertTab(HOST);
781 admiralSwitchTab.insertTab(HOST);
782 toasterSwitchTab.insertTab(HOST);
783 consoleDBTab.insertTab(HOST);
784 logisticsTab.insertTab(HOST);
785 mobilityPartsTab.insertTab(HOST);
786 mobilityPartsSearchTab.insertTab(HOST);
787 dcopileTab.insertTab(HOST);
788 runbookTab.insertTab(HOST);
789 //Tabs Tyler's added
790 bomFailureTab.insertTab(HOST);
791 hostRecordTab.insertTab(HOST);
792 partHistoryTab.insertTab(HOST);
793 tavernTab.insertTab(HOST);
794 ipaTab.insertTab(HOST);
795 saisonTab.insertTab(HOST);
796 tripelTab.insertTab(HOST);
797 boostTab.insertTab(HOST);
798 // playgroundTab.insertTab(HOST);
799 window.addEventListener("load", initAll, false);
800
801
802
803
804})();
805
806
807
808
809function hashTable(obj)
810{
811 this.length = 0;
812 this.items = {};
813 for (var p in obj) {
814 if (obj.hasOwnProperty(p)) {
815 this.items;
816 }
817 }
818 this.setItem = function(key, value) {
819 var previous = undefined;
820 if (this.hasItem(key)) {
821 previous = this.items[key];
822 } else {
823 this.length++;
824 this.items[key] = value;
825 return previous;
826 }
827 }
828
829 this.modItem = function(key, value)
830 {
831 var previous = undefined;
832 if (this.hasItem(key))
833 {
834 previous = this.items[key];
835 delete this.items[key];
836 this.items[key] = value;
837 return previous;
838 }
839 else
840 {
841 this.length++;
842 this.items[key] = value;
843 return previous;
844 }
845 }
846
847 this.getItem = function(key) {
848 return this.hasItem(key) ? this.items[key] : undefined;
849 }
850
851 this.getKey = function(key)
852 {
853 return this.hasItem(key) ? key : undefined;
854 }
855
856 this.hasItem = function(key) {
857 return this.items.hasOwnProperty(key);
858 }
859
860 this.removeItem = function(key) {
861 if (this.hasItem(key)) {
862 previous = this.items[key];
863 this.length--;
864 delete this.items[key];
865 return previous;
866 } else {
867 return undefined;
868 }
869 }
870
871 this.keys = function() {
872 var keys = [];
873 for (var k in this.items) {
874 if (this.hasItem(k)) {
875 keys.push(k);
876 }
877 }
878 return keys;
879 }
880
881 this.values = function () {
882 var values = [];
883 for (var k in this.items) {
884 if (this.hasItem(k)) {
885 values.push(this.items[k]);
886 }
887 }
888 return values;
889 }
890
891 this.clear = function() {
892 this.items = {};
893 this.length = 0;
894 }
895}
896
897function makeTab(obj)
898{
899 var self = this;
900 var config = self.config;
901 obj.push(self)
902 config = new hashTable();
903 config.setItem('iframeHeight', 460);
904 config.setItem('iframeWidth', 630);
905 config.setItem('iframeIsLoad', false);
906
907 self.configTab = function (name, url, key, alt, t)
908 {
909 var split = name.split(' ');
910 var tabHtmlId = 'tab_' + split[0] + '_' + split[1];
911 var tabHrefId = 'tab-' + split[0] + '-' + split[1];
912 var tabHtmlIframeId = 'iframe_' + split[0] + '_' + split[1];
913
914 var tabHtmlContainerId = 'container_' + split[0] + '_' + split[1]; // Untested
915
916 config.setItem('tabName', name);
917 config.setItem('url', url);
918 config.setItem('iframeUrlKey', key);
919 config.setItem('contentType', t);
920 config.setItem('tabHtmlId', tabHtmlId);
921 config.setItem('tabHtmlHref', tabHrefId);
922 config.setItem('tabHtmlIframeId', tabHtmlIframeId);
923 config.setItem('tabHtmlContainerId', tabHtmlContainerId);
924
925 if (!alt)
926 {
927 config.setItem('tabHtmlSpan', name);
928 }
929 else
930 {
931 config.setItem('tabHtmlSpan', alt);
932 }
933 }
934
935 self.insertTab = function(obj)
936 {
937 var tabText = '<li><a href="#' + config.getItem('tabHtmlHref');
938 tabText += '" id="' + config.getItem('tabHtmlId');
939 tabText += '" ' + 'style="display: none;"';
940 tabText += '><span>' + config.getItem('tabHtmlSpan') + ' ';
941 tabText += '<img id="update_iframe_' + config.getItem('tabHtmlIframeId') + '" class="expandable" border="0" src="/images/small_refresh.png" style="display: inline;">';
942 tabText += '<img id="update_iframe_' + config.getItem('tabHtmlIframeId') + '_indicator" align="top" style="display: none;" src="/images/small_load.gif">';
943 tabText += '</span></li>';
944 $('ul.ui-tabs-nav').append(tabText);
945
946 var type = config.getItem('contentType');
947 if (type=='iframe')
948 {
949 var text = '<div id="' + config.getItem('tabHtmlHref') + '" class="tabarea ui-tabs-panel ui-tabs-hide ">';
950 text += '<div id="' + config.getItem('tabHtmlContainerId') + '" class="ui-widget-content">';
951 text += '</div></div>';
952 $('#tabstrip').append(text);
953
954 self.getIframeSize();
955 var h = config.getItem('iframeHeight');
956 var w = config.getItem('iframeWidth');
957 var sel = '#' + config.getItem('tabHtmlContainerId');
958 var selH = sel + 'h3';
959 $(sel).css({ 'width': w, 'height': h, 'padding': '0.5em' });
960 $(selH).css({ 'text-align': 'center', 'margin': '0' });
961
962 $(function() {
963 $(sel).resizable();
964 });
965
966 $(window).resize(function() {
967 self.getIframeSize();
968 var h = config.getItem('iframeHeight');
969 var w = config.getItem('iframeWidth');
970 $(sel).css({ 'width': w, 'height': h});
971 });
972
973 var el = document.getElementById('update_iframe_' + config.getItem('tabHtmlIframeId'));
974 el.addEventListener('click', self.reloadIframe, false);
975 }
976 else if (type=='logistics')
977 {
978 config.modItem('iframeIsLoad', true);
979 var h = config.getItem('iframeHeight');
980 var w = config.getItem('iframeWidth');
981 var tabSelect = '<div id="' + config.getItem('tabHtmlHref');
982 tabSelect += '" class="tabarea ui-tabs-panel ui-tabs-hide ">';
983
984 // Grab provisioning data to render Out of Warranty status for host
985 var host_name = $('input#hostname').val();
986 GM_xmlhttpRequest({
987 method: 'GET',
988 url: "https://provisioning-web.amazon.com/hosts/" + host_name,
989 headers: {
990 'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey',
991 'Accept': 'application/atom+xml,application/xml,text/xml',
992 },
993 onreadystatechange: function(response) {
994 if (response.readyState === 4) {
995 if (response.status === 200) {
996 var hardware_id = JSON.parse(response.responseText).hardware_id;
997 var first_seen = new Date(JSON.parse(response.responseText).first_seen);
998 if( hardware_id && first_seen) {
999 var message = "<div><b>Hw Id:</b> " + hardware_id +
1000 "</div><div><b>First Seen:</b> " + first_seen.toDateString() +
1001 "<span id='oow_message'></span></div>";
1002 $('#first_seen_date').html(message)
1003 var ageDifMs = Date.now() - first_seen.getTime();
1004 var ageDate = new Date(ageDifMs); // miliseconds from epoch
1005 if (Math.abs(ageDate.getUTCFullYear() - 1970) >= 3) {
1006 $('#first_seen_date').css('background-color', '#ff9999');
1007 $('#oow_message').html(' <b>(OOW)</b>')
1008 }
1009 } else {
1010 console.err("Can't resolve host details for IPS OOW status.")
1011 }
1012 } else {
1013 console.err("Provisioning returned non-200.")
1014 }
1015 }
1016 }
1017 });
1018
1019 var tagOptMenu = '<h4>Select from the following:</h4>';
1020 tagOptMenu += '<select multiple id="tagOptMenu">';
1021 tagOptMenu += '<option value="IPS_PART_EOL">IPS_PART_EOL</option>';
1022 tagOptMenu += '<option value="IPS_MISSING_BOM">IPS_MISSING_BOM</option>';
1023 tagOptMenu += '<option value="IPS_MISSING_FROM_BOM">IPS_MISSING_FROM_BOM</option>';
1024 tagOptMenu += '<option value="IPS_NO_SEED_STOCK">IPS_NO_SEED_STOCK</option>';
1025 tagOptMenu += '<option value="IPS_INADEQUATE_SEED_STOCK">IPS_INADEQUATE_SEED_STOCK</option>';
1026 tagOptMenu += '<option value="IPS_INADEQUATE_STOCK">IPS_INADEQUATE_STOCK</option>';
1027 tagOptMenu += '<option value="IPS_PART_AVAILABLE_ONSITE">IPS_PART_AVAILABLE_ONSITE</option>';
1028 tagOptMenu += '<option value="IPS_UNPLANNED_PROJECT">IPS_UNPLANNED_PROJECT</option>';
1029 tagOptMenu += '<option value="IPS_TRANSFER_REQUIRED">IPS_TRANSFER_REQUIRED</option>';
1030 tagOptMenu += '<option value="IPS_TRACKING_TICKET">IPS_TRACKING_TICKET</option>';
1031 tagOptMenu += '<option value="IPS_PENDING_ALTERNATE_QUALIFICATION">IPS_PENDING_ALTERNATE_QUALIFICATION</option>';
1032 tagOptMenu += '<option value="IPS_SUPPLY_CONSTRAINT">IPS_SUPPLY_CONSTRAINT</option>';
1033 tagOptMenu += '<option value="IPS_INADEQUATE_INFORMATION">IPS_INADEQUATE_INFORMATION</option>';
1034 tagOptMenu += '<option value="IPS_SERVER_DNR">IPS_SERVER_DNR</option>';
1035 tagOptMenu += '</select>';
1036
1037 var text = tabSelect;
1038 text += '<div id="' + config.getItem('tabHtmlContainerId') + '">';
1039 text += '<div class="demo">';
1040 text += '<div id="resizable" class="ui-widget-content">';
1041 text += '<h3 class="ui-widget-header">Warranty Info</h3>';
1042 text += '<div id="first_seen_date"></div>';
1043 text += '<h3 class="ui-widget-header">Tag Selection</h3>';
1044 text += '<div>' + tagOptMenu + '</div>';
1045 text += '<a id="submitTags" class="button">Submit Tags</a>';
1046 text += '<br/><span><a href="https://w.amazon.com/index.php/DCOSE/Projects/ttIntegrator">Tag Description and Intended Usage</a></span>';
1047 text += '<h3 class="ui-widget-header">Existing Tags</h3>';
1048 text += '<ol id="copyTags"></div>';
1049 text += '</div></div><!-- End Demo -->';
1050 text += '</div></div>';
1051 $('#tabstrip').append(text);
1052
1053 $('#resizable').css({ 'width': '350px', 'height': '500px', 'padding': '0.5em' });
1054 $('#resizable h3').css({ 'text-align': 'center', 'margin': '0' });
1055
1056 $(function() {
1057 $('#resizable').resizable();
1058 });
1059
1060 function loadTags() {
1061 $('#copyTags').children().remove();
1062 setTimeout(function(){
1063 $('#existingTags').children().clone().appendTo('#copyTags');
1064 }, 1500);
1065 }
1066
1067 $('#tagOptMenu').css({ 'height': '200px'});
1068
1069 $('#tab_logistics_tags, #update_iframe_iframe_logistics_tags').click(function() {
1070 document.getElementById('tab_related_items').click();
1071 loadTags();
1072 });
1073
1074 $('.delete-tag').live('click',
1075 function() {
1076 loadTags();
1077 });
1078
1079 $('#submitTags').click(function() {
1080 that = this;
1081 var options = $('#tagOptMenu option:selected');
1082
1083 for (i=0;i<options.length;i++)
1084 {
1085 $('#tagToAdd').val(options[i].value);
1086 document.getElementById('tagSubmit').click();
1087 }
1088 loadTags();
1089 });
1090 }
1091 else
1092 {
1093 config.modItem('iframeIsLoad', true);
1094 var h = config.getItem('iframeHeight');
1095 var w = config.getItem('iframeWidth');
1096 var tabSelect = '<div id="' + config.getItem('tabHtmlHref');
1097 tabSelect += '" class="tabarea ui-tabs-panel ui-tabs-hide ">';
1098
1099 var text = tabSelect;
1100 text += '<div id="' + config.getItem('tabHtmlContainerId') + '">';
1101 text += '<div class="demo">';
1102 text += '<div id="resizable" class="ui-widget-content">';
1103 text += '<h3 class="ui-widget-header">Resizable</h3>';
1104 text += '</div></div><!-- End Demo -->';
1105 text += '</div></div>';
1106 $('#tabstrip').append(text);
1107
1108 $('#resizable').css({ 'width': '150px', 'height': '150px', 'padding': '0.5em' });
1109 $('#resizable h3').css({ 'text-align': 'center', 'margin': '0' });
1110
1111 $(function() {
1112 $('#resizable').resizable();
1113 });
1114 }
1115 }
1116
1117 self.setLoad = function(obj)
1118 {
1119 var divSelect = 'a#' + config.getItem('tabHtmlId');
1120 self.getIframeSize();
1121 $(divSelect).click(function()
1122 {
1123 self.loadIframe(obj);
1124 });
1125 }
1126
1127 self.loadIframe = function(obj)
1128 {
1129 var t = config.getItem('contentType');
1130 if (t=='iframe')
1131 {
1132 var isLoad = config.getItem('iframeIsLoad');
1133 if (isLoad===false){
1134 config.modItem('iframeIsLoad', true);
1135 self.appendIframe(obj);
1136 }
1137 }
1138 }
1139
1140 self.reloadIframe = function(obj)
1141 {
1142 var isLoad = config.getItem('iframeIsLoad');
1143 if (isLoad===false){
1144 self.loadIframe;
1145 }
1146 else if (isLoad===true)
1147 {
1148 // Temporary work around until I have the time to implement
1149 // safe cross-dom communication using the new HTML5 standards
1150 var d = document.getElementById(config.getItem('tabHtmlContainerId'));
1151 var old = document.getElementById(config.getItem('tabHtmlIframeId'));
1152 d.removeChild(old);
1153 config.modItem('iframeIsLoad', false);
1154 self.loadIframe;
1155
1156 // This was the original that didn't work due to cross-dom security
1157 //var f = config.getItem('tabHtmlIframeId');
1158 //document.getElementById(f).contentWindow.location.reload();
1159 }
1160 }
1161
1162 self.appendIframe = function (obj)
1163 {
1164 self.makeIframeUrl(obj);
1165 var iframeText = '<iframe id="' + config.getItem('tabHtmlIframeId');
1166 iframeText += '" border="0" seamless="seamless" src="' + config.getItem('iframeUrl');
1167 iframeText += '" width="100%" height="100%" style="border:0px solid#eee;" ></iframe>';
1168 var select = '#' + config.getItem('tabHtmlContainerId');
1169 $(select).append(iframeText);
1170 }
1171
1172 self.makeIframeUrl = function (obj)
1173 {
1174
1175 var keyName = config.getItem('iframeUrlKey');
1176 var url = config.getItem('url');
1177 var name = config.getItem('tabName');
1178 if (url.match(/%CLUSTER%/))
1179 {
1180 if(obj.getItem('Site'))
1181 {
1182 var site = obj.getItem('Site').substring(0,3);
1183 if (site =="ZET") {
1184 site = "zeta";
1185 }
1186 //account for nonstandard site names.
1187 if (site == "FRA" || site == "BJS") {
1188 if (name == 'cloud forge') {
1189 url = url.replace('%CLUSTER%' , site);
1190 }else if (name == 'admiral info' || name == 'admiral switch' || name == 'ec2 console' || name == 'admiral rack') {
1191 url = url.replace('-%CLUSTER%.ec2.amazon.com' , "."+site + ".aws-border.com");
1192 } else {
1193 url = url.replace('%CLUSTER%' , site);
1194 }
1195 } else if (site == "PDT") {
1196 if (name == 'cloud forge') {
1197 url = url.replace('%CLUSTER%' , site);
1198 }else if (name == 'admiral info' || name == 'admiral switch' || name == 'ec2 console' || name == 'admiral rack') {
1199 url = url.replace('%CLUSTER%.ec2.amazon.com' , site + ".ec2."+ site +".amazon.com");
1200 } else {
1201 url = url.replace('%CLUSTER%' , site);
1202 }
1203 } else {
1204 url = url.replace('%CLUSTER%' , site);
1205 }
1206 }else{
1207 url = url.replace('%CLUSTER%' , obj.getItem('Device').substring(0,3));
1208 }
1209 }
1210 if (obj.getItem(keyName)) {
1211 url += obj.getItem(keyName);
1212 }
1213 // dcopile
1214 if (config.getItem('tabName') == 'dcopile pages') {
1215 var manValue = obj.getItem('Manufacturer');
1216 if (manValue =='ZTSYSTEM'){
1217 manValue ='ZT'
1218 };
1219 var modelType = obj.getItem('Model');
1220 // dcopile map for SNX/QCI/FOX/ZT due to variances in naming convention of PBS servertype urls.
1221 var dcoMAP={
1222 'ZT': {
1223 'ACADIA12':'EC2.CR1.12,ZTSYSTEM,ACADIA12',
1224 'ACHERON11':'CF.CACHE.11,ZT,ACHERON11',
1225 'ACHERON12':'CF.CACHE.12,ZT SYSTEMS,ACHERON12',
1226 'ASH11':'EBS.FLASH.11,ZT SYSTEMS,ASH11',
1227 'ASH12':'EBS.FLASH.12C,ZTSYSTEM,ASH12',
1228 'ASH12.5':'EBS.FLASH.12.5,ZTSYSTEM,ASH12.5',
1229 'ASH12.6':'EBS.FLASH.12.6,ZTSYSTEM,ASH12.6',
1230 'ASH12.7':'EBS.FLASH.12.7,ZTSYSTEM,ASH12.7',
1231 'ASH13':'EBS.FLASH.13,ZT SYSTEMS,ASH13',
1232 'ASH14':'EBS.FLASH.14,ZT,ASH14',
1233 'ASH15':'EBS.FLASH.15,ZT,ASH15',
1234 'AVALON12':'EC2.M2.12D,ZTSYSTEM,AVALON12',
1235 'BALDR15':'EC2.CLOUDHSM.15,ZT,BALDR15',
1236 'BANFF12':'EC2.M1.12,ZT SYSTEMS,BANFF12',
1237 'BANFF12.3':'EC2.M1.12.3,ZT SYSTEMS,BANFF12.3',
1238 'BANFF12.3':'S3.M1.12.3,ZT SYSTEMS,BANFF12.3',
1239 'BANFF13':'EC2.M1.13,ZT SYSTEMS,BANFF13',
1240 'BARKLEY14':'EC2.M4.14,ZT,BARKLEY.14',
1241 'BARKLEY14D':'EC2.M4.14D,ZT,BARKLEY14D',
1242 'BARKLEY15':'EC2.M4.15,ZT,BARKLEY15',
1243 'BARKLEY16':'EC2.M5.16,ZT,BARKLEY16',
1244 'BARKLEYB14':'EC2.M4.14B,ZT_SYSTEMS,BARKLEYB14_(110-000394-001)',
1245 'BARKLEYK15':'EC2.M4K.15,ZT,BARKLEYK15',
1246 'BLACKEYE14':'S3.JLB.14,ZT SYSTEMS,BLACKEYE14',
1247 'BLACKFOOT13':'BLACKFOOT13,ZT SYSTEMS,BLACKFOOT13',
1248 'BLACKFOOT15':'BF.BLACKFOOT.15,ZT,BLACKFOOT15',
1249 'BLACKWATCH':'BLACKWATCH,ZT SYSTEMS,BLACKWATCH',
1250 'BLUESTONE11':'EC2.Hi1.11,ZT SYSTEMS,BLUESTONE11',
1251 'BONSAI11.5':'CF.DNS.11,ZT SYSTEMS,BONSAI11.5',
1252 'CASSOWARY14':'EC2.T2.14,ZT,CASSOWARY14',
1253 'CASSOWARYB14':'EC2.T2.14B,ZT,CASSOWARYB14(110-000392-001) ',
1254 'CEDAR12':'DB.LARGE.12,ZT, CEDAR12',
1255 'CEDAR12.5':'DB.LARGE.12.5,ZT,CEDAR12.5',
1256 'CLUSTERCOMPUTE1':'EC2COMPUTECC109,ZT SYSTEM,CLUSTERCOMPUTE1',
1257 'COLUMBIA13':'EC2.Hi2.13,ZT SYSTEMS,COLUMBIA13',
1258 'CONGAREE12':'EC2.HS1.12,ZT SYSTEMS,CONGAREE12',
1259 'CYPRESS11':'EC2.CC2.11,ZTSYSTEM,CYPRESS11',
1260 'DDBLB14':'CYCLOPS14,ZTSYSTEM,DDBLB14',
1261 'DENALI11':'EC2.C1.11,ZT,DENALI11',
1262 'DOGWOOD11':'S3.BITSTORESS.11,ZTSYSTEM,DOGWOOD11',
1263 'EMU14':'EC2.T2.14.5,ZT,EMU14',
1264 'EMUB14':'EC2.T2.14.5B,ZT_SYSTEM,EMUB14_(110-000393-001)',
1265 'FIREBAT13':'CF.CACHE LITE.13,ZT SYSTEMS,FIREBAT13',
1266 'GOBI15':'DB.IO.15,ZT,GOBI15',
1267 'GOBI15':'DB.IO.A15,ZT,GOBI15',
1268 'GRIZZLY15':'DB.LARGE.15,ZT_SYSTEMS,GRIZZLY15',
1269 'HABANERO11':'SLIMFAST11,ZTSYSTEM,HABANERO11',
1270 'HABANERO11.5':'SLIMFAST11.5,ZT SYSTEMS,HABANERO11.5',
1271 'HAPUNA':'S3.JLB.12,ZT SYSTEMS,HAPUNA',
1272 'HORIZON15':'CF.CACHE.15,ZT,HORIZON15',
1273 'HUMBOLDT15':'KMS,ZT,HUMBOLDT15',
1274 'HYPERION13':'CF.CACHE.13,ZT SYSTEMS,HYPERION13',
1275 'JAEGER1015':'S3.JAEGER10.15,ZT,JAEGER1015',
1276 'JAEGER8T':'S3.JAEGER.8T,ZT,JAEGER8T',
1277 'JASPER12':'EC2.C1.12,ZTSYSTEM,JASPER12',
1278 'JASPER13':'EC2.C1.13,ZT SYSTEMS,JASPER13',
1279 'JUGGERNAUT15':'EC2.R4.15,ZT,JUGGERNAUT15',
1280 'JUNO13':'S3.KEYMAP.13,ZT SYSTEMS,JUNO13',
1281 'KANHA13':'EC2.C3.13,ZT SYSTEMS,KANHA13',
1282 'KATMAI11':'EC2.M1.11.5,ZT,KATMAI11',
1283 'KAURI10':'S3.BITSTORE.10,ZT SYSTEMS,KAURI10',
1284 'KAURI1015':'S3.BITSTORE10.15,ZT,KAURI1015',
1285 'KAURI11':'S3.BITSTORE.11,ZTSYSTEM,KAURI11',
1286 'KAURI12':'S3.BITSTORE.12,ZT SYSTEMS,KAURI12',
1287 'KAURI12.5':'S3.BITSTORE.12.5,ZT SYSTEMS,KAURI12.5',
1288 'KAURI12.6':'S3.BITSTORE.12.6,ZT SYSTEMS,KAURI12.6',
1289 'KAURI5T':'S3.BITSTORE.5T,ZT SYSTEMS,KAURI5T',
1290 'KAURI6T':'S3.BITSTORE.6T,ZT SYSTEMS,KAURI6T',
1291 'KAURI8T':'S3.BITSTORE.8T,ZTSYSTEMS,KAURI8T',
1292 'KAURIA815':'S3.BITSTOREA8.15,ZT,KAURIA815',
1293 'KAURIS1015':'S3.BITSTORES10.15,ZT,KAURIS1015',
1294 'KENAI12':'EC2.M3.12,ZT SYSTEMS,KENAI12',
1295 'KENAI13':'EC2.M3.13,ZT SYSTEMS,KENAI13',
1296 'KODIAK15':'DB.SMALL.15,ZT_SYSTEMS,KODIAK15',
1297 'KONA':'S3.JFS.12,ZT SYSTEMS,KONA',
1298 'MALLARD15':'EC2.I3.15,ZT,MALLARD15',
1299 'MAPLE12':'DB.SMALL.12,ZTSYSTEM,MAPLE12',
1300 'MAPLE12.5':'DB.SMALL.12.5,ZTSYSTEM,MAPLE12.5',
1301 'NEUTRINO16':'EC2.C5D.16,ZT,NEUTRINO16',
1302 'OAK12':'DB.MID.12,ZT SYSTEMS,OAK12',
1303 'OAK12.5':'DB.MID.12.5,ZT SYSTEMS,OAK12.5',
1304 'OHIO15':'EBS.STREAM.15,ZT,OHIO15',
1305 'OHIO6T':'OHIO6T,ZT',
1306 'OHIO6T14':'EBS.STREAM.14,ZT SYSTEM,OHIO6T14',
1307 'OSTRICH13':'EC2.T2.13A,ZT SYSTEMS,OSTRICH13',
1308 'PACUARE':'EC2.M1.10,ZTSYSTEM,PACUARE',
1309 'ROGUE12':'EC2.M2.12,ZTSYSTEM,ROGUE12',
1310 'ROVER15':'EC2.M4SB.15,ZT,ROVER15',
1311 'SATURN14':'EC2.D2.14,ZT,SATURN14',
1312 'SATURNB14':'EC2.D2.14B,ZT SYSTEMS,SATURNB14',
1313 'SEQUOIA09':'S3.BITSTORE.09A,ZT SYSTEMs,SEQUOIA09',
1314 'SKAGIT12':'EBS.STORE.12,ZT SYSTEM,SKAGIT12',
1315 'SKAGIT12.5':'EBS.STORE.12.5,ZT SYSTEMS,SKAGIT12.5',
1316 'SKAGIT13':'EBS.STORE.13,ZT SYSTEM,SKAGIT13',
1317 'SKYKOMISH':'EC2.M1.11,ZTSYSTEM,SKYKOMISH',
1318 'SLIMIOPS09.5':'SLIMIOPS09.5,ZTSYSTEM,SLIMIOPS09.5',
1319 'SLIMIOPS0910G':'SLIMIOPS0910G,ZT SYSTEMS,SLIMIOPS0910G',
1320 'SLIMLINE09.5':'SLIMLINE09.5,ZTSYSTEM,SLIMLINE09.5',
1321 'SUNBEAR15':'DB.LARGEHD.15,ZT,SUNBEAR15_(110-000544-001)',
1322 'TACHYON16':'EC2.C5.16,ZT,TACHYON16',
1323 'VOYAGER14':'EC2.C4.14,ZT SYSTEMS,VOYAGER.14',
1324 'VOYAGERB14':'EC2.C4.14B,ZT,VOYAGERB14',
1325 'WHITESNAKE14':'S3.WEBSERVER.14,ZT,WHITESNAKE14',
1326 'WHITESNAKE15':'S3.WEBSERVER.15,ZT,WHITESNAKE15',
1327 'WHITESNAKEA14':'S3.WS.A14,ZT,WHITESNAKEA14',
1328 'WILLOW11':'S3.BITSTORED.11,ZTSYSTEM,WILLOW11',
1329 'WILLOW11.5':'S3.KEYMAP.11.5,ZT SYSTEMS,WILLOW11.5',
1330 'WOLVERINE13':'EC2.R3.13,ZT SYSTEMS,WOLVERINE13',
1331 'YELLOWSTONE':'EC2COMPUTEM109,ZTSYSTEM,YELLOWSTONE',
1332 'YETI14':'GLACIER.YETI.C14,ZTSYSTEM,YETI14',
1333 },
1334 'SYNNEX': {
1335 'ASH12':'EBS.FLASH.12,SYNNEX,ASH12',
1336 'ASH13':'EBS.FLASH.13,SYNNEX,ASH13',
1337 'ASH14':'EBS.FLASH.14,SYNNEX,ASH14',
1338 'ASH15':'EBS.FLASH.15,SYNNEX,ASH15',
1339 'BANFF13':'EC2.M1.13,SYNNEX,BANFF13',
1340 'BARKLEY14':'EC2.M4.14,SYNNEX,BARKLEY14',
1341 'BARKLEY15':'EC2.M4.15,SYNNEX,BARKLEY15',
1342 'BARKLEYB14 ':'EC2.M4.14B,SYNNEX,BARKLEYB14 ',
1343 'BLACKEYE15':'S3.BLACKEYE.15,SYNNEX,BLACKEYE15',
1344 'CASSOWARYB14 ':'EC2.T2.14B,SYNNEX,CASSOWARYB14 ',
1345 'COLUMBIA13':'EC2.Hi2.13,SYNNEX,COLUMBIA13',
1346 'COLUMBIAA13':'EC2.Hi2.13,SYNNEX,COLUMBIAA13',
1347 'CONGAREE12':'EC2.HS1.12,SYNNEX,CONGAREE12',
1348 'EMU14':'EC2.T2.14.5,SYNNEX,EMU14',
1349 'EMUB14 ':'EC2.T2.14.5B,SYNNEX,EMUB14 ',
1350 'FIREBAT13':'CF.CACHE LITE.13,SYNNEX,FIREBAT13',
1351 'HORIZON15':'CF.CACHE.15,SYNNEX,HORIZON15',
1352 'HYPERION13':'CF.CACHE.13,SYNNEX,HYPERION13',
1353 'JASPER13':'EC2.C1.13,SYNNEX,JASPER13',
1354 'JUGGERNAUT15':'EC2.R4.15,SYNNEX,JUGGERNAUT15',
1355 'JUNO13':'S3.KEYMAP.13,SYNNEX,JUNO13',
1356 'JUNO15':'S3.KEYMAP.15,SYNNEX,JUNO15',
1357 'KANHA13':'EC2.C3.13,SYNNEX,KANHA13',
1358 'KAURI12.5':'S3.BITSTORE.12.5,SYNNEX,KAURI12.5',
1359 'KAURI12.6':'S3.BITSTORE.12.6,SYNNEX,KAURI12.6',
1360 'KAURI6T':'S3.BITSTORE.6T,SYNNEX,KAURI6T',
1361 'KENAI13':'EC2.M3.13,SYNNEX,KENAI13',
1362 'MALLARD15':'EC2.I3.15,SYNNEX,MALLARD15',
1363 'MANDARIN15':'EC2.I3B.15,SYNNEX,MANDARIN15_(110-000523-001) ',
1364 'MARS16':'EC2.T3.16,SYNNEX,MARS16',
1365 'MUSCOVY15':'EC2.I3.15D,SYNNEX,MUSCOVY15',
1366 'NEUTRINO16':'EC2.C5D.16,SYNNEX,NEUTRINO16',
1367 'ORION16':'EC2.T3O.16,SYNNEX,ORION16',
1368 'OSTRICH13':'EC2.T2.13A,SYNNEX,OSTRICH13',
1369 'ROVER15':'EC2.M4SB.15,SYNNEX,ROVER15',
1370 'SKYKOMISH':'EC2.M1.11,SYNNEX,SKYKOMISH',
1371 'SPICY12':'SPICY12,SYNNEX,SPICY12',
1372 'SPICY13':'SPICY13,SYNNEX,SPICY13',
1373 'SPICY15':'DDB.SPICY.15,SYNNEX,SPICY15',
1374 'TACHYON16':'EC2.C5.16,SYNNEX,TACHYON16',
1375 'VOYAGER14':'EC2.C4.14,Synnex,VOYAGER.14',
1376 'VOYAGERB14':'EC2.C4.14B,SYNNEX,VOYAGERB14',
1377 'WHITESNAKE15':'S3.WEBSERVER.15,SYNNEX,WHITESNAKE15',
1378 'WILLOW11.5':'S3.KEYMAP.11.5,SYNNEX,WILLOW11.5',
1379 'WOLVERINE13':'EC2.R3.13,SYNNEX,WOLVERINE13'
1380 },
1381 'QUANTA': {
1382 'ACADIA12':'EC2.CR1.12,QUANTA,ACADIA12',
1383 'ASH12.5':'EBS.FLASH.12.5,QUANTA,ASH12.5',
1384 'ASH12.6':'EBS.FLASH.12.6,QUANTA,ASH12.6',
1385 'ASH12.7':'EBS.FLASH.12.7,QUANTA,ASH12.7',
1386 'ASH14':'EBS.FLASH.14,QUANTA,ASH14',
1387 'ASH15':'EBS.FLASH.15,QUANTA,ASH15',
1388 'ASH16':'EBS.FLASH.16,QUANTA,ASH16',
1389 'BANFF12':'EC2.M1.12,QUANTA,BANFF12',
1390 'BANFF13':'EC2.M1.13,QUANTA,BANFF13',
1391 'BARGE11':'GLACIER.BARGE.11,QUANTA,BARGE11',
1392 'BARGE13':'GLACIER.BARGE.13,QUANTA,BARGE13',
1393 'BARKLEY14':'EC2.M4.14,QUANTA,BARKLEY.14',
1394 'BARKLEY14D':'EC2.M4.14D,QUANTA,BARKLEY14D',
1395 'BARKLEY15':'EC2.M4.15,QUANTA,BARKLEY15',
1396 'BARKLEY16':'EC2.M5.16,QUANTA,BARKLEY16',
1397 'BARKLEYB14':'EC2.M4.14B,QUANTA,BARKLEYB14',
1398 'BLACKEYE14':'S3.JLB.14,QUANTA,BLACKEYE14',
1399 'BLACKFOOT13':'BLACKFOOT13,QUANTA',
1400 'BLACKFOOT14':'BLACKFOOT14,QUANTA',
1401 'BLUESTONE11':'EC2.Hi1.11,QUANTA,BLUESTONE11',
1402 'CASSOWARY14':'EC2.T2.14,QUANTA,CASSOWARY14',
1403 'CASSOWARYB14 ':'EC2.T2.14B,QUANTA,CASSOWARYB14 ',
1404 'COLUMBIA13':'EC2.Hi2.13,QUANTA,COLUMBIA13',
1405 'CORONA16':'EC2.M5D.16,QUANTA,CORONA16',
1406 'DANUBE15':'EC2.G3.15,QUANTA,DANUBE15_(110-000507-001)',
1407 'EITHNE14':'EITHNE.14,QUANTA,EITHNE14',
1408 'ELF13':'EC2.G2.13M,QUANTA,ELF13',
1409 'EMU14':'EC2.T2.14.5,QUANTA,EMU14',
1410 'EMUB14':'EC2.T2.14.5B,QUANTA,EMUB14_(110-000410-001) ',
1411 'EUROPA15 ':'EC2.X1E.15,QUANTA,EUROPA15 ',
1412 'FREIGHTER12':'S3.FREIGHTER.12,QUANTA,FREIGHTER12',
1413 'HYDRA15':'EC2.CG3SB.15,QUANTA,HYDRA15',
1414 'JAEGER8T':'S3.JAEGER.8T,QUANTA,JAEGER8T',
1415 'JASPER12':'EC2.C1.12,QUANTA,JASPER12',
1416 'JASPER13':'EC2.C1.13,QUANTA,JASPER13',
1417 'JUGGERNAUT15':'EC2.R4.15,QUANTA,JUGGERNAUT15',
1418 'JUPITER15':'EC2.X1.15,QUANTA,JUPITER15',
1419 'KANHA13':'EC2.C3.13,QUANTA,KANHA13',
1420 'KAURI11':'S3.BITSTORE.11,QUANTA,KAURI11',
1421 'KAURI12':'S3.BITSTORE.12,QUANTA,KAURI12',
1422 'KAURI12.5':'S3.BITSTORE.12.5,QUANTA,KAURI12.5',
1423 'KAURI12.6':'S3.BITSTORE.12.6,QUANTA,KAURI12.6',
1424 'KAURI6T':'S3.BITSTORE.6T,Quanta,KAURI6T',
1425 'KAURI6T LITE':'S3.BITSTORE.6TLITE,QUANTA,KAURI6T LITE',
1426 'KAURI8T':'S3.BITSTORE.8T,QUANTA,KAURI8T',
1427 'KAURIA815':'S3.BITSTOREA8.15,QUANTA,KAURIA815',
1428 'KENAI12':'EC2.M3.12,QUANTA,KENAI12',
1429 'KENAI13':'EC2.M3.13,QUANTA,KENAI13',
1430 'MALLARD15':'EC2.I3.15,QUANTA,MALLARD15',
1431 'MARS16':'EC2.T3.16,QUANTA,MARS16',
1432 'MEDUSA15':'EC2.P2.15,QUANTA,MEDUSA15',
1433 'NEUTRINO16':'EC2.C5D.16,QUANTA,NEUTRINO16',
1434 'OHIO15':'EBS.STREAM.15,QUANTA,OHIO15_(110-000493-003)',
1435 'OHIO6T':'OHIO6T,QUANTA',
1436 'OHIO6T14':'EBS.STREAM.14,QUANTA,OHIO6T14',
1437 'ORINOCO15':'EC2.E3.15,QUANTA,ORINOCO15',
1438 'OSTRICH13':'EC2.T2.13A,QUANTA,OSTRICH13',
1439 'PEGASUS15':'EC2.F1.15,QUANTA,PEGASUS15',
1440 'POPLAR11':'POPLAR11,QUANTA',
1441 'REDRIVER12':'EC2.G2.12,QUANTA,RED RIVER 12',
1442 'REDRIVER13':'EC2.G2.13,QUANTA,REDRIVER13',
1443 'ROGUE12':'EC2.M2.12,QUANTA,ROGUE12',
1444 'SATURN14':'EC2.D2.14,QUANTA,SATURN14',
1445 'SATURNB14':'EC2.D2.14B,QUANTA,SATURNB14_(110-000411-001) ',
1446 'SKAGIT12':'EBS.STORE.12,QUANTA,SKAGIT12',
1447 'SKAGIT13':'EBS.STORE.13,QUANTA,SKAGIT13',
1448 'SKYKOMISH':'EC2.M1.11,QUANTA,SKYKOMISH',
1449 'SPHINX15':'EC2.P3.15,QUANTA,SPHINX15',
1450 'SPICY12':'SPICY12,QUANTA,SPICY12',
1451 'SPICY13':'SPICY13,QUANTA,SPICY13',
1452 'TACHYON16':'EC2.C5.16,QUANTA,TACHYON16',
1453 'TANKER12':'S3BARGE12,QUANTA,TANKER12',
1454 'TANKER13':'S3.TANKER.13,QUANTA,TANKER13',
1455 'TANKER6T':'S3.TANKER.6T,QUANTA,TANKER6T',
1456 'VOYAGER14':'EC2.C4.14,QUANTA,VOYAGER.14',
1457 'VOYAGERB14':'EC2.C4.14B,QUANTA,VOYAGERB14',
1458 'WHITESNAKE14':'S3.WEBSERVER.14,QUANTA,WHITESNAKE14',
1459 'WHITESNAKEA14':'S3.WS.A14,QUANTA,WHITESNAKEA14',
1460 'WOLVERINE13':'EC2.R3.13,QUANTA,WOLVERINE13'
1461 },
1462 'FOXCONN': {
1463 'ACADIA12':'EC2.CR1.12,FOXCONN,ACADIA12',
1464 'ACHERON12':'CF.CACHE.12,FOXCONN,ACHERON12',
1465 'ASH12.6':'EBS.FLASH.12.6,FOXCONN,ASH12.6',
1466 'ASH12.7':'EBS.FLASH.12.7,FOXCONN,ASH12.7',
1467 'ASH13':'EBS.FLASH.13,FOXCONN,ASH13',
1468 'ASH14':'EBS.FLASH.14,FOXCONN,ASH14',
1469 'ASH15':'EBS.FLASH.15,FOXCONN,ASH15',
1470 'BANFF12':'EC2.M1.12,FOXCONN,BANFF12',
1471 'BANFF12.3':'EC2.M1.12.3,FOXCONN,BANFF12.3',
1472 'BANFF13':'EC2.M1.13,FOXCONN,BANFF13',
1473 'BARKLEY14':'EC2.M4.14,FOXCONN,BARKLEY.14',
1474 'BARKLEY15':'EC2.M4.15,FOXCONN,BARKLEY15',
1475 'BARKLEY16':'EC2.M5.16,FOXCONN,BARKLEY16',
1476 'BARKLEYB14 ':'EC2.M4.14B,FOXCONN,BARKLEYB14 ',
1477 'BARKLEYK15':'EC2.M4K.15,FOXCONN,BARKLEYK15',
1478 'BLACKWATCH':'BLACKWATCH,FOXCONN,BLACKWATCH',
1479 'CASSOWARY13':'EC2.T2.13,FOXCONN,CASSOWARY13_(110-000186-001)',
1480 'CASSOWARY14':'EC2.T2.14,FOXCONN,CASSOWARY14',
1481 'CASSOWARYB14':'EC2.T2.14B,FOXCONN,CASSOWARYB14_(110-000382-001) ',
1482 'CONGAREE12':'EC2.HS1.12,FOXCONN,CONGAREE12',
1483 'CORONA16':'EC2.M5D.16,FOXCONN,CORONA16',
1484 'DANUBE15 ':'EC2.G3.15,FOXCONN,DANUBE15 ',
1485 'EMU14':'EC2.T2.14.5,FOXCONN,EMU14',
1486 'EMUB14':'EC2.T2.14.5B,FOXCONN,EMUB14',
1487 'HAPUNA':'S3.JLB.12,FOXCONN,HAPUNA',
1488 'JAEGER1015':'S3.JAEGER10.15,FOXCONN,JAEGER1015',
1489 'JAEGER8T':'S3.JAEGER.8T,FOXCONN,JAEGER8T',
1490 'JASPER12':'EC2.C1.12,FOXCONN,JASPER12',
1491 'JASPER13':'EC2.C1.13,FOXCONN,JASPER13',
1492 'JUGGERNAUT15':'EC2.R4.15,FOXCONN,JUGGERNAUT15',
1493 'JUNO15':'S3.KEYMAP.15,FOXCONN,JUNO15,(110-000355-001)',
1494 'KANHA13':'EC2.C3.13,FOXCONN,KANHA13',
1495 'KAURI1015':'S3.BITSTORE10.15,FOXCONN,KAURI1015_(110-000455-002)',
1496 'KAURI11':'S3.BITSTORE.11,FOXCONN,KAURI11',
1497 'KAURI12':'S3.BITSTORE.12,FOXCONN,KAURI12',
1498 'KAURI12.6':'S3.BITSTORE.12.6,FOXCONN,KAURI12.6',
1499 'KAURI5T':'S3.BITSTORE.5T,FOXCONN,KAURI5T',
1500 'KAURI6T':'S3.BITSTORE.6T,FOXCONN,KAURI6T',
1501 'KENAI12':'EC2.M3.12,FOXCONN,KENAI12',
1502 'KENAI13':'EC2.M3.13,FOXCONN,KENAI13',
1503 'KRAKEN15':'EBS.SHELF.15,FOXCONN,KRAKEN15',
1504 'MARS16':'EC2.T3.16,FOXCONN,MARS16',
1505 'MEDUSA15':'EC2.P2.15,FOXCONN,MEDUSA15',
1506 'NEUTRINO16':'EC2.C5D.16,FOXCONN,NEUTRINO16',
1507 'NJORD15':'EC2.M4.15L,FOXCONN,NJORD15',
1508 'ORINOCO15':'EC2.E3.15,FOXCONN,ORINOCO15',
1509 'ORION16':'EC2.T3O.16,FOXCONN,ORION16',
1510 'OSTRICH13':'EC2.T2.13A,FOXCONN,OSTRICH13',
1511 'PLUTO15':'EC2.M4S.15,FOXCONN,PLUTO15',
1512 'POSEIDON15':'EBS.LEGO.15,FOXCONN,POSEIDON15',
1513 'REDRIVER12':'EC2.G2.12,FOXCONN,RED RIVER 12',
1514 'REDRIVER13':'EC2.G2.13,FOXCONN,REDRIVER13',
1515 'ROGUE12':'EC2.M2.12,FOXCONN,ROGUE12',
1516 'ROVER15':'EC2.M4SB.15,FOXCONN,ROVER15,(110-000336-001)',
1517 'SATURN14':'EC2.D2.14,FOXCONN,SATURN14',
1518 'SATURNB14':'EC2.D2.14B,FOXCONN,SATURNB14_(110-000384-001) ',
1519 'SKAGIT12':'EBS.STORE.12,FOXCONN,SKAGIT12',
1520 'SKAGIT13':'EBS.STORE.13,FOXCONN,SKAGIT13',
1521 'SPHINX15':'EC2.P3.15,FOXCONN,SPHINX15',
1522 'SPICY12':'SPICY12,FOXCONN,SPICY12',
1523 'SPICY15':'DDB.SPICY.15,FOXCONN,SPICY15',
1524 'TACHYON16':'EC2.C5.16,FOXCONN,TACHYON16',
1525 'TANKER12':'S3.TANKER.12,FOXCONN,TANKER12',
1526 'TANKER13':'S3.TANKER.13,FOXCONN,TANKER13',
1527 'TANKER6T':'S3.TANKER.6T,FOXCONN,TANKER6T',
1528 'VOYAGER14':'EC2.C4.14,FOXCONN,VOYAGER.14',
1529 'VOYAGERB14':'EC2.C4.14B,FOXCONN,VOYAGERB14',
1530 'WHITESNAKE14':'S3.WEBSERVER.14,FOXCONN,WHITESNAKE14',
1531 'WHITESNAKE15':'S3.WEBSERVER.15,FOXCONN,WHITESNAKE15_(110-000521-001)',
1532 'WOLVERINE13':'EC2.R3.13,FOXCONN,WOLVERINE13',
1533 }
1534
1535
1536
1537 }
1538
1539 // dcopile mapper or null return for ALL types
1540 var serverType = dcoMAP[manValue][modelType]
1541
1542 if (serverType == null) {
1543 serverType = obj.getItem('ServerType')+ "," + manValue + "," + modelType;
1544
1545 }
1546
1547 url = "https://w.amazon.com/index.php/Public/DCO/DCOpile/servertypes/" + serverType;
1548
1549 }
1550
1551 //Tabs Tyler's added
1552 //Sets part history URL
1553 if(name == 'part history'){
1554 url = "https://tavern.corp.amazon.com/lambic?host_id="+host_name;
1555 }
1556 if(name == 'ipa tab'){
1557 url = "https://tavern.corp.amazon.com/ipa?host_id="+host_name;
1558 }
1559 if(name == 'saison tab'){
1560 url = "https://tavern.corp.amazon.com/saison?filters=__dedupe&host_id="+host_name+"&limit=true"
1561 }
1562 if(name == 'boost tab'){
1563 var tt = document.querySelector("#context_bar > table > tbody > tr > td.Case.ID").innerHTML;
1564 tt = tt.substring(19, 29)
1565 console.log(tt);
1566 url = "https://myday-website-iad.iad.proxy.amazon.com/ticket/"+tt;
1567 //console.log(url);
1568 }
1569
1570
1571 config.setItem('iframeUrl', url);
1572 }
1573
1574 self.getIframeSize = function ()
1575 {
1576 var winW = 630, winH = 460;
1577 var footH = $("#footer").height();
1578 if (document.body && document.body.offsetWidth) {
1579 winW = document.body.offsetWidth;
1580 winH = document.body.offsetHeight;
1581 }
1582 if (document.compatMode=='CSS1Compat' &&
1583 document.documentElement &&
1584 document.documentElement.offsetWidth ) {
1585 winW = document.documentElement.offsetWidth;
1586 winH = document.documentElement.offsetHeight;
1587 }
1588 if (window.innerWidth && window.innerHeight) {
1589 winW = window.innerWidth;
1590 winH = window.innerHeight;
1591 }
1592 var width = $('#tabstrip').width() * 0.97;
1593 var height = (winH - (footH * 3));
1594 config.modItem('iframeWidth', width);
1595 config.modItem('iframeHeight', 700);
1596 }
1597}
1598
1599function optionsMenu(obj)
1600{
1601 var self = this;
1602 var config = self.config;
1603
1604 var dT = obj;
1605
1606 var loc = "" + document.location;
1607 if ( loc.match(/tt.amazon.com\/[\dE]\d{4,}/) )
1608 {
1609 newMenu();
1610 tabDefaults();
1611
1612 newOptionContainer('Tabs');
1613
1614 for (i=0;i<dT.tabs.length;i++)
1615 {
1616 newSubOption(dT.tabs[i].parent, dT.tabs[i].inputName, dT.tabs[i].display, dT.tabs[i].inputType);
1617 }
1618 }
1619
1620 function newMenu()
1621 {
1622 var menuText = '<div id="ttintegrator-menu-content" class="menu-content multi-column flyout-right" style="display: none;">';
1623 menuText += '<div class="menu-column">';
1624 menuText += '</div>';
1625 menuText += '</div>';
1626 $('#header').append('<div id="menu_ttintegrator" class="menu"><div class="menu-button"><a href="#">ttIntegrator</a></div>' + menuText + '</div>');
1627 $('#menu_ttintegrator').css({'float': 'left', 'margin-top': '20px',});
1628 $('#menu_ttintegrator a').css({'font-size': '14px'});
1629 $('#ttintegrator-menu-content').css({
1630 'top': '10px',
1631 'position': 'absolute',
1632 'max-width': '585px',
1633 'min-width': '200px',
1634 'font-size': '14px',
1635 'border': '2px solid rgb(0, 89, 158)',
1636 'border-radius': '6px',
1637 'background-color': 'rgb(255, 255, 255)',
1638 'z-index': '99999',
1639 'box-shadow': '3px 3px 15px 0pt rgba(0, 0, 0, 0.5)',
1640 'top': '25px !important'
1641 });
1642 $('#header .multi-column').css({
1643 'padding': '5px'
1644 });
1645 $('#ttintegrator-menu-content b').css({
1646 'font-size': '12px',
1647 });
1648 $('#ttintegrator-menu-content select').css({
1649 'float': 'right'
1650 });
1651 $('#ttintegrator-menu-content input').css({
1652 'margin-top': '4px',
1653 'float': 'right'
1654 });
1655 $('#ttintegrator-menu-content h3').css({
1656 'bottom-border': '1px solid rgb(238, 238, 238)',
1657 'text-align': 'left',
1658 'margin': '0em',
1659 });
1660 $('#ttintegrator-menu-content').css({
1661 'text-align': 'left',
1662 'padding': '10px'
1663 });
1664 $('.ttintegrator-menu-subcontent').css({
1665 'border': '1px solid rgb(238, 238, 238)',
1666 'border-radius': '6px',
1667 'padding': '6px',
1668 'margin-top': '4px',
1669 });
1670 }
1671
1672 function newOptionContainer(n)
1673 {
1674 var t = '<div id="' + n + '-menu-parent">';
1675 t += '<h3>' + n + '</h3>';
1676 t += '<table></table>';
1677 t += '</div>';
1678 $('div#ttintegrator-menu-content').append(t);
1679 }
1680
1681 // p = parent node to attach to, like tabs
1682 // n = name of the option
1683 // dN = display name for the option
1684 // i = type of input, like select or checkbox
1685 // arr = array for drop down menu
1686 function newSubOption(p, n, dN, i, arr)
1687 {
1688
1689 if ( i == 'select' )
1690 {
1691 var t = '<p><b>' + dN + '</b>';
1692 t += '<select id="ttintegrator-option-' + n + '" name="">';
1693 t += '<option value="0">Option 1</option>';
1694 t += '<option value="1">Option 2</option>';
1695 t += '</select></p>';
1696 $('div#' + p + '-menu-parent').append(t);
1697 }
1698 else if ( i == 'checkbox' )
1699 {
1700 var t = '<tr><td>' + dN + '</td>';
1701 t += '<td><input id="ttintegrator-option-' + n + '" type="checkbox" value="1"></input></td></tr>';
1702
1703 $('div#' + p + '-menu-parent').append(t);
1704
1705 var cB = document.getElementById('ttintegrator-option-' + n);
1706 if (window.localStorage.getItem('tab-enable-' + n)==1)
1707 {
1708 $('#ttintegrator-option-' + n).attr('checked', 'checked');
1709 }
1710
1711 cB.addEventListener('click', modTab, false);
1712 }
1713 }
1714
1715 function tabDefaults()
1716 {
1717 for (i=0;i<dT.tabs.length;i++)
1718 {
1719 var s = 'tab-enable-' + dT.tabs[i].inputName;
1720 if (!window.localStorage.getItem(s))
1721 {
1722 window.localStorage.setItem(s, 1);
1723 }
1724
1725 // Workaround for hiding the tab-cc-list since it doesn't have a div id...
1726 // This is annoying
1727 if (dT.tabs[i].inputName=='ttEmail')
1728 {
1729 $('a[href="#tab-cc-list"]').attr('id', 'tab_cc_list');
1730 }
1731 }
1732 }
1733
1734 function modTab(e)
1735 {
1736 for (i=0;i<dT.tabs.length;i++)
1737 {
1738 var eTest = 'ttintegrator-option-' + dT.tabs[i].inputName;
1739 var s = 'tab-enable-' + dT.tabs[i].inputName;
1740 if (eTest==e.target.id)
1741 {
1742 if (window.localStorage.getItem(s)==1)
1743 {
1744 $('#' + dT.tabs[i].elementId).css({ 'display': 'none' });
1745 window.localStorage.setItem(s, 0);
1746 }
1747 else
1748 {
1749 $('#' + dT.tabs[i].elementId).css({ 'display': 'block' });
1750 window.localStorage.setItem(s, 1);
1751 }
1752 }
1753 }
1754 }
1755
1756 this.displayTabs = function(f, fallback)
1757 {
1758 for (i=0;i<dT.tabs.length;i++)
1759 {
1760 var l = 'tab-enable-' + dT.tabs[i].inputName;
1761 var el2 = '#' + dT.tabs[i].elementId;
1762 if ((dT.tabs[i].filter=='none' && window.localStorage.getItem(l)==1) || (fallback==1 && dT.tabs[i].key=="Host" && window.localStorage.getItem(l)==1))
1763 {
1764 $(el2).css({ 'display': 'block' });
1765 }
1766 else if (typeof(f.getItem(dT.tabs[i].filter)) != "undefined" && window.localStorage.getItem(l)==1)
1767 {
1768 var filter = dT.tabs[i].filter;
1769 if (dT.tabs[i].key.toLowerCase()==f.getItem(filter).toLowerCase())
1770 {
1771 $(el2).css({ 'display': 'block' });
1772 }else if (filter == 'Service' && typeof f.getItem('Service') !== 'undefined') {
1773 $(el2).css({ 'display': 'block' });
1774 }
1775 }
1776 else if (window.localStorage.getItem(l)==0)
1777 {
1778 $(el2).css({ 'display': 'none' });
1779 }
1780 }
1781 }
1782
1783}