BlueCat Address Manager Direct Actions (Server Actions)

Add direct buttons for Server Actions in BlueCat Address Manager

目前為 2018-06-07 提交的版本,檢視 最新版本

  1. // ==UserScript==
  2. // @name BlueCat Address Manager Direct Actions (Server Actions)
  3. // @namespace *
  4. // @description Add direct buttons for Server Actions in BlueCat Address Manager
  5. // @include */app*
  6. // @license MIT
  7. // @version 6
  8. // @grant none
  9. // @copyright 2018, Marius Galm
  10. // @license MIT
  11. // @icon https://www.bluecatnetworks.com/wp-content/uploads/2018/03/cropped-bluecat-favicon-32x32.png
  12. // ==/UserScript==
  13.  
  14. if (document.readyState === "interactive" ) {
  15. var page = document.childNodes[2].nodeValue;
  16. if (/ Page: ConfigurationPage /.test(page)) {
  17. var subtab = document.getElementsByClassName("TabPanelLabelActive")[0];
  18. if (/Servers/.test(subtab.innerHTML.trim())) {
  19. // go through the h
  20. var outertable = document.getElementById("outerTable");
  21. var header = new Array();
  22. var spanheaders = 0;
  23. for (var i = 0, row; row = outertable.rows[i]; i++) {
  24. // process header
  25. if (i === 0) {
  26. //iterate through rows
  27. //rows would be accessed using the "row" variable assigned in the for loop
  28. for (var j = 0, col; col = row.cells[j]; j++) {
  29. //iterate through columns
  30. //check if the column td has an id to check for
  31. if (col.id != null) {
  32. // add 1 to spanheaders to get the correct fields later
  33. if (col.id.startsWith("spanHeader")) {
  34. // found a span header substrace one more for future fields
  35. spanheaders = spanheaders + 1;
  36. //console.log("spanHeader count now: "+spanheaders);
  37. continue;
  38. }
  39. }
  40. // get first element of header-text content
  41. var text = col.getElementsByClassName("header-text")[0];
  42. if (text !== undefined) {
  43. var trimmed = text.innerText.trim();
  44. if (text !== undefined) {
  45. if (trimmed === "Name") {
  46. header.name = j;
  47. } else if (trimmed === "Managed") {
  48. //console.log("normal cound would be: "+j+" but we need to substrace "+spanheaders+" for the span headers")
  49. header.managed = j-spanheaders;
  50. } else if (trimmed === "Profile") {
  51. //console.log("normal cound would be: "+j+" but we need to substrace "+spanheaders+" for the span headers")
  52. header.profile = j-spanheaders;
  53. }
  54. }
  55. }
  56. }
  57. } else {
  58. // get necessary columns by header if
  59. var namecell = row.cells[header.name];
  60. // extract Text, because we don't need the rest
  61. var name = namecell.innerText.trim();
  62. var managed = row.cells[header.managed].innerText.trim();
  63. var profile = row.cells[header.profile].innerText.trim();
  64. var isCluster = false;
  65. var image = namecell.getElementsByTagName('img');
  66. if (image !== undefined) {
  67. // odd, shouldn't happen
  68. if (image[0].src.indexOf("cluster") > -1) {
  69. var cluster = 'Found Cluster "'+name+'" as Managed: "'+managed+'" with Profile "'+profile+'"';
  70. isCluster = true;
  71. //console.log(cluster);
  72. } else {
  73. var server = 'Found Server "'+name+'" as Managed: "'+managed+'" with Profile "'+profile+'"';
  74. // console.log(server);
  75. }
  76. // only for managed BDDS
  77. if (managed === "Yes") {
  78. if (profile.startsWith("BlueCat DNS")||profile.startsWith("Adonis")) {
  79. // get Server ID from link
  80. var link = namecell.getElementsByTagName("a")[0].href;
  81. var rest = link.split("SingleServer%3A")[1];
  82. var server_id = rest.split("%")[0];
  83. // add links with icons to namecell
  84. var td = namecell.getElementsByTagName("a")[0].parentNode;
  85. var tr = td.parentNode;
  86. // console.log(" + Adding Buttons")
  87. // edit button
  88. var x = tr.insertCell(-1);
  89. var editlink = "";
  90. if (isCluster) {
  91. // special Link for clusters (why? no idea -> the other link let's you set the hostname :-D )
  92. editlink = "/app?component=%24TabbedEntityContainer.%24PagePanel.pageMenu.direct&page=ServerPage&service=direct&session=T&sp=Spage%3DAddEditXHA&sp=Svalue%3DSingleServer%3A"+server_id+"%3A18&sp=ScontextId%3Ddetails&sp=SformMode%3Dedit";
  93. }else {
  94. editlink = "/app?component=%24TabbedEntityContainer.%24PagePanel.pageMenu.direct&page=ServerPage&service=direct&session=T&sp=Spage%3DAddEditServer&sp=Svalue%3DSingleServer%3A"+server_id+"%3A18&sp=ScontextId%3Ddetails&sp=SformMode%3Dedit";
  95. }
  96. // more room between the name and the buttons
  97. x.innerHTML='<td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="'+editlink+'"><img title="Edit Server Settings" src="/images/icons/small/document_edit.gif" border="0"></a></td>';
  98. // view logs button
  99. var y = tr.insertCell(-1);
  100. var loglink = "/app?component=%24TabbedEntityContainer.%24PagePanel.pageMenu.direct&page=ServerPage&service=direct&session=T&sp=Spage%3DViewLogs&sp=Svalue%3DSingleServer%3A"+server_id+"%3A18"
  101. y.innerHTML='<td><a href="'+loglink+'"><img title="View Server Logs" src="/images/icons/small/server_view.gif" border="0"></a></td>';
  102. // service config button
  103. var z = tr.insertCell(-1);
  104. var conflink = "/app?component=%24TabbedEntityContainer.%24PagePanel.pageMenu.direct&page=ServerPage&service=direct&session=T&sp=Spage%3DServerServiceConfigure&sp=Svalue%3DSingleServer%3A"+server_id+"%3A18"
  105. z.innerHTML='<td><a href="'+conflink+'"><img title="Service Configuration" src="/images/icons/small/server_configuration.gif" border="0"></a></td>';
  106. }
  107. }
  108. }
  109. }
  110. //console.log(header);
  111. }
  112. }
  113. }
  114. }