k8s.io/test-infra@v0.0.0-20240520184403-27c6b4c223d8/docs/architecture.svg (about)

     1  <?xml version="1.0" encoding="UTF-8" standalone="no"?>
     2  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
     3   "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
     4  <!-- Generated by graphviz version 2.44.0 (0)
     5   -->
     6  <!-- Title: G Pages: 1 -->
     7  <svg width="1418pt" height="1151pt"
     8   viewBox="0.00 0.00 1417.64 1150.60" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
     9  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(4 1146.6)">
    10  <title>G</title>
    11  <polygon fill="white" stroke="transparent" points="-4,4 -4,-1146.6 1413.64,-1146.6 1413.64,4 -4,4"/>
    12  <text text-anchor="middle" x="704.82" y="-1127.4" font-family="Times-Roman" font-size="14.00">Kubernetes Test Infrastructure (Last updated 2020&#45;03&#45;04)</text>
    13  <g id="clust1" class="cluster">
    14  <title>cluster_Prow</title>
    15  <polygon fill="none" stroke="blue" points="266.36,-740.22 266.36,-1111.6 980.36,-1111.6 980.36,-740.22 266.36,-740.22"/>
    16  <text text-anchor="middle" x="623.36" y="-1096.4" font-family="Times-Roman" font-size="14.00">Prow</text>
    17  </g>
    18  <g id="clust2" class="cluster">
    19  <title>cluster_legend</title>
    20  <polygon fill="none" stroke="black" points="667.36,-245.52 667.36,-359.48 1317.36,-359.48 1317.36,-245.52 667.36,-245.52"/>
    21  <text text-anchor="middle" x="992.36" y="-344.28" font-family="Times-Roman" font-size="14.00">Legend</text>
    22  </g>
    23  <!-- legend_ext -->
    24  <g id="node1" class="node">
    25  <title>legend_ext</title>
    26  <polygon fill="gray" stroke="black" points="1309.36,-328 1235.36,-328 1235.36,-254 1309.36,-254 1309.36,-328"/>
    27  <text text-anchor="middle" x="1272.36" y="-294.8" font-family="Times-Roman" font-size="14.00">External</text>
    28  <text text-anchor="middle" x="1272.36" y="-279.8" font-family="Times-Roman" font-size="14.00">Service</text>
    29  </g>
    30  <!-- GCS -->
    31  <g id="node2" class="node">
    32  <title>GCS</title>
    33  <polygon fill="gray" stroke="black" points="703.36,-667.22 657.36,-667.22 657.36,-621.22 703.36,-621.22 703.36,-667.22"/>
    34  <text text-anchor="middle" x="680.36" y="-640.52" font-family="Times-Roman" font-size="14.00">GCS</text>
    35  </g>
    36  <!-- PubSub -->
    37  <g id="node3" class="node">
    38  <title>PubSub</title>
    39  <polygon fill="gray" stroke="black" points="1204.36,-579.72 1134.36,-579.72 1134.36,-509.72 1204.36,-509.72 1204.36,-579.72"/>
    40  <text text-anchor="middle" x="1169.36" y="-541.02" font-family="Times-Roman" font-size="14.00">PubSub</text>
    41  </g>
    42  <!-- GCS&#45;&gt;PubSub -->
    43  <g id="edge15" class="edge">
    44  <title>GCS&#45;&gt;PubSub</title>
    45  <path fill="none" stroke="black" d="M703.62,-641.27C763.96,-635.87 930.13,-618.77 1064.36,-584.22 1084.44,-579.05 1106.04,-571.49 1124.4,-564.44"/>
    46  <polygon fill="black" stroke="black" points="1125.92,-567.6 1133.96,-560.7 1123.37,-561.08 1125.92,-567.6"/>
    47  </g>
    48  <!-- Spyglass -->
    49  <g id="node7" class="node">
    50  <title>Spyglass</title>
    51  <polygon fill="lightblue" stroke="black" points="619.79,-550.28 556.36,-562.72 492.93,-550.28 492.99,-530.15 619.73,-530.15 619.79,-550.28"/>
    52  <text text-anchor="middle" x="556.36" y="-541.02" font-family="Times-Roman" font-size="14.00">Spyglass</text>
    53  </g>
    54  <!-- GCS&#45;&gt;Spyglass -->
    55  <g id="edge22" class="edge">
    56  <title>GCS&#45;&gt;Spyglass</title>
    57  <path fill="none" stroke="black" d="M657.33,-625.11C635.84,-608.21 603.85,-583.06 581.66,-565.61"/>
    58  <polygon fill="black" stroke="black" points="583.7,-562.76 573.68,-559.33 579.37,-568.26 583.7,-562.76"/>
    59  </g>
    60  <!-- Testgrid (closed) -->
    61  <g id="node9" class="node">
    62  <title>Testgrid (closed)</title>
    63  <g id="a_node9"><a xlink:href="https://testgrid.k8s.io" xlink:title="Testgrid (closed)">
    64  <polygon fill="lightblue" stroke="black" points="1084.84,-432.91 979.36,-445.35 873.88,-432.91 873.97,-412.78 1084.75,-412.78 1084.84,-432.91"/>
    65  <text text-anchor="middle" x="979.36" y="-423.65" font-family="Times-Roman" font-size="14.00">Testgrid (closed)</text>
    66  </a>
    67  </g>
    68  </g>
    69  <!-- GCS&#45;&gt;Testgrid (closed) -->
    70  <g id="edge21" class="edge">
    71  <title>GCS&#45;&gt;Testgrid (closed)</title>
    72  <path fill="none" stroke="black" d="M703.82,-626.36C758.01,-587.41 891.75,-491.31 950.68,-448.96"/>
    73  <polygon fill="black" stroke="black" points="952.74,-451.79 958.82,-443.11 948.65,-446.1 952.74,-451.79"/>
    74  </g>
    75  <!-- Gubernator -->
    76  <g id="node10" class="node">
    77  <title>Gubernator</title>
    78  <g id="a_node10"><a xlink:href="https://gubernator.k8s.io" xlink:title="Gubernator">
    79  <polygon fill="lightblue" stroke="black" points="1055.5,-550.28 979.36,-562.72 903.22,-550.28 903.29,-530.15 1055.43,-530.15 1055.5,-550.28"/>
    80  <text text-anchor="middle" x="979.36" y="-541.02" font-family="Times-Roman" font-size="14.00">Gubernator</text>
    81  </a>
    82  </g>
    83  </g>
    84  <!-- GCS&#45;&gt;Gubernator -->
    85  <g id="edge4" class="edge">
    86  <title>GCS&#45;&gt;Gubernator</title>
    87  <path fill="none" stroke="black" d="M713.21,-634.93C742.55,-627.34 786.6,-615.44 824.36,-603.22 868.19,-589.03 917.99,-570.03 949.04,-557.83"/>
    88  <polygon fill="black" stroke="black" points="712.3,-631.56 703.48,-637.44 714.04,-638.34 712.3,-631.56"/>
    89  </g>
    90  <!-- Triage -->
    91  <g id="node20" class="node">
    92  <title>Triage</title>
    93  <g id="a_node20"><a xlink:href="https://go.k8s.io/triage" xlink:title="Triage">
    94  <polygon fill="#1e90ff" stroke="black" points="836.86,-209 777.86,-209 777.86,-150 836.86,-150 836.86,-209"/>
    95  <text text-anchor="middle" x="807.36" y="-175.8" font-family="Times-Roman" font-size="14.00">Triage</text>
    96  </a>
    97  </g>
    98  </g>
    99  <!-- GCS&#45;&gt;Triage -->
   100  <g id="edge20" class="edge">
   101  <title>GCS&#45;&gt;Triage</title>
   102  <path fill="none" stroke="black" d="M663.97,-611.88C655.69,-593.19 647.36,-568.7 647.36,-545.72 647.36,-545.72 647.36,-545.72 647.36,-290 647.36,-268.99 649.1,-260.95 663.36,-245.52 694.17,-212.18 745.33,-194.77 777.65,-186.63"/>
   103  <polygon fill="black" stroke="black" points="660.87,-613.5 668.26,-621.08 667.21,-610.54 660.87,-613.5"/>
   104  </g>
   105  <!-- Kettle -->
   106  <g id="node31" class="node">
   107  <title>Kettle</title>
   108  <ellipse fill="none" stroke="black" cx="1282.36" cy="-427.35" rx="127.06" ry="26.74"/>
   109  <text text-anchor="middle" x="1282.36" y="-431.15" font-family="Times-Roman" font-size="14.00">Kettle</text>
   110  <text text-anchor="middle" x="1282.36" y="-416.15" font-family="Times-Roman" font-size="14.00">get GCS results into BQ</text>
   111  </g>
   112  <!-- PubSub&#45;&gt;Kettle -->
   113  <g id="edge16" class="edge">
   114  <title>PubSub&#45;&gt;Kettle</title>
   115  <path fill="none" stroke="black" d="M1202.96,-509.41C1217.94,-494.12 1235.51,-476.18 1250.31,-461.07"/>
   116  <polygon fill="black" stroke="black" points="1252.83,-463.5 1257.33,-453.9 1247.83,-458.6 1252.83,-463.5"/>
   117  <text text-anchor="middle" x="1253.86" y="-476.02" font-family="Times-Roman" font-size="14.00">read</text>
   118  </g>
   119  <!-- GitHub\nthrough\nghproxy -->
   120  <g id="node4" class="node">
   121  <title>GitHub\nthrough\nghproxy</title>
   122  <polygon fill="gray" stroke="black" points="1062.36,-948.17 988.36,-948.17 988.36,-874.17 1062.36,-874.17 1062.36,-948.17"/>
   123  <text text-anchor="middle" x="1025.36" y="-922.47" font-family="Times-Roman" font-size="14.00">GitHub</text>
   124  <text text-anchor="middle" x="1025.36" y="-907.47" font-family="Times-Roman" font-size="14.00">through</text>
   125  <text text-anchor="middle" x="1025.36" y="-892.47" font-family="Times-Roman" font-size="14.00">ghproxy</text>
   126  </g>
   127  <!-- GitHub\nthrough\nghproxy&#45;&gt;Gubernator -->
   128  <g id="edge2" class="edge">
   129  <title>GitHub\nthrough\nghproxy&#45;&gt;Gubernator</title>
   130  <path fill="none" stroke="black" d="M1019.52,-863.89C1009.8,-786.87 990.59,-634.71 982.78,-572.84"/>
   131  <polygon fill="black" stroke="black" points="1016.06,-864.41 1020.78,-873.89 1023,-863.53 1016.06,-864.41"/>
   132  <polygon fill="black" stroke="black" points="986.23,-572.19 981.5,-562.7 979.28,-573.06 986.23,-572.19"/>
   133  <text text-anchor="middle" x="1037.36" y="-704.02" font-family="Times-Roman" font-size="14.00">PR events</text>
   134  </g>
   135  <!-- Hook -->
   136  <g id="node25" class="node">
   137  <title>Hook</title>
   138  <ellipse fill="none" stroke="black" cx="854.36" cy="-1047.38" rx="118.17" ry="26.74"/>
   139  <text text-anchor="middle" x="854.36" y="-1051.18" font-family="Times-Roman" font-size="14.00">Hook</text>
   140  <text text-anchor="middle" x="854.36" y="-1036.18" font-family="Times-Roman" font-size="14.00">handle GitHub events</text>
   141  </g>
   142  <!-- GitHub\nthrough\nghproxy&#45;&gt;Hook -->
   143  <g id="edge3" class="edge">
   144  <title>GitHub\nthrough\nghproxy&#45;&gt;Hook</title>
   145  <path fill="none" stroke="black" d="M1016.47,-948.24C1010.8,-964.72 1001.91,-983.36 988.36,-996.17 975.98,-1007.87 960.63,-1016.9 944.78,-1023.86"/>
   146  <polygon fill="black" stroke="black" points="943.32,-1020.67 935.4,-1027.72 945.98,-1027.15 943.32,-1020.67"/>
   147  <text text-anchor="middle" x="1030.86" y="-977.47" font-family="Times-Roman" font-size="14.00">events</text>
   148  </g>
   149  <!-- BigQuery -->
   150  <g id="node5" class="node">
   151  <title>BigQuery</title>
   152  <g id="a_node5"><a xlink:href="https://bigquery.cloud.google.com/table/k8s_infra_kettle:build.week" xlink:title="BigQuery">
   153  <polygon fill="gray" stroke="black" points="1409.36,-332 1327.36,-332 1327.36,-250 1409.36,-250 1409.36,-332"/>
   154  <text text-anchor="middle" x="1368.36" y="-287.3" font-family="Times-Roman" font-size="14.00">BigQuery</text>
   155  </a>
   156  </g>
   157  </g>
   158  <!-- Metrics -->
   159  <g id="node19" class="node">
   160  <title>Metrics</title>
   161  <polygon fill="#1e90ff" stroke="black" points="1241.86,-213 1174.86,-213 1174.86,-146 1241.86,-146 1241.86,-213"/>
   162  <text text-anchor="middle" x="1208.36" y="-175.8" font-family="Times-Roman" font-size="14.00">Metrics</text>
   163  </g>
   164  <!-- BigQuery&#45;&gt;Metrics -->
   165  <g id="edge19" class="edge">
   166  <title>BigQuery&#45;&gt;Metrics</title>
   167  <path fill="none" stroke="black" d="M1327.31,-250.15C1325.33,-248.55 1323.34,-247 1321.36,-245.52 1299.36,-229.14 1272.87,-213.7 1251.06,-201.98"/>
   168  <polygon fill="black" stroke="black" points="1252.51,-198.78 1242.03,-197.19 1249.23,-204.97 1252.51,-198.78"/>
   169  </g>
   170  <!-- BigQuery&#45;&gt;Triage -->
   171  <g id="edge18" class="edge">
   172  <title>BigQuery&#45;&gt;Triage</title>
   173  <path fill="none" stroke="black" d="M1329.11,-249.83C1326.59,-248.23 1324,-246.77 1321.36,-245.52 1278.68,-225.34 960.31,-194.53 847.14,-184.1"/>
   174  <polygon fill="black" stroke="black" points="847.43,-180.61 837.15,-183.18 846.79,-187.58 847.43,-180.61"/>
   175  </g>
   176  <!-- legend_site -->
   177  <g id="node6" class="node">
   178  <title>legend_site</title>
   179  <ellipse fill="none" stroke="black" cx="1172.36" cy="-291" rx="45.01" ry="26.74"/>
   180  <text text-anchor="middle" x="1172.36" y="-294.8" font-family="Times-Roman" font-size="14.00">Serves</text>
   181  <text text-anchor="middle" x="1172.36" y="-279.8" font-family="Times-Roman" font-size="14.00">HTTP</text>
   182  </g>
   183  <!-- GKE -->
   184  <g id="node16" class="node">
   185  <title>GKE</title>
   186  <polygon fill="gray" stroke="black" points="430.16,-419.89 430.16,-434.8 411.53,-445.35 385.19,-445.35 366.56,-434.8 366.56,-419.89 385.19,-409.35 411.53,-409.35 430.16,-419.89"/>
   187  <polygon fill="none" stroke="black" points="434.18,-417.56 434.18,-437.13 412.59,-449.35 384.13,-449.35 362.55,-437.13 362.55,-417.56 384.13,-405.35 412.59,-405.35 434.18,-417.56"/>
   188  <text text-anchor="middle" x="398.36" y="-423.65" font-family="Times-Roman" font-size="14.00">GKE</text>
   189  </g>
   190  <!-- Spyglass&#45;&gt;GKE -->
   191  <g id="edge23" class="edge">
   192  <title>Spyglass&#45;&gt;GKE</title>
   193  <path fill="none" stroke="black" d="M529.53,-524.12C501.71,-503.81 458.28,-472.1 429.09,-450.79"/>
   194  <polygon fill="black" stroke="black" points="527.48,-526.96 537.62,-530.03 531.6,-521.31 527.48,-526.96"/>
   195  <polygon fill="black" stroke="black" points="431.04,-447.87 420.9,-444.8 426.91,-453.53 431.04,-447.87"/>
   196  </g>
   197  <!-- Deck -->
   198  <g id="node8" class="node">
   199  <title>Deck</title>
   200  <g id="a_node8"><a xlink:href="https://prow.k8s.io" xlink:title="Deck\nfrontend">
   201  <polygon fill="lightblue" stroke="black" points="717.71,-1057.71 651.36,-1080.81 585.01,-1057.71 585.07,-1020.34 717.65,-1020.34 717.71,-1057.71"/>
   202  <text text-anchor="middle" x="651.36" y="-1051.18" font-family="Times-Roman" font-size="14.00">Deck</text>
   203  <text text-anchor="middle" x="651.36" y="-1036.18" font-family="Times-Roman" font-size="14.00">frontend</text>
   204  </a>
   205  </g>
   206  </g>
   207  <!-- ApiServer -->
   208  <g id="node30" class="node">
   209  <title>ApiServer</title>
   210  <polygon fill="none" stroke="black" points="682.98,-904.57 668.2,-929.66 608.36,-940.82 548.52,-929.66 533.74,-904.57 575.15,-884.46 641.57,-884.46 682.98,-904.57"/>
   211  <text text-anchor="middle" x="608.36" y="-914.97" font-family="Times-Roman" font-size="14.00">Kubernetes</text>
   212  <text text-anchor="middle" x="608.36" y="-899.97" font-family="Times-Roman" font-size="14.00">API Server</text>
   213  </g>
   214  <!-- Deck&#45;&gt;ApiServer -->
   215  <g id="edge10" class="edge">
   216  <title>Deck&#45;&gt;ApiServer</title>
   217  <path fill="none" stroke="black" d="M642.97,-1020.19C636.45,-999.85 627.34,-971.41 620.1,-948.82"/>
   218  <polygon fill="black" stroke="black" points="623.41,-947.68 617.03,-939.22 616.75,-949.81 623.41,-947.68"/>
   219  <text text-anchor="middle" x="649.86" y="-977.47" font-family="Times-Roman" font-size="14.00">read</text>
   220  </g>
   221  <!-- Testgrid (closed)&#45;&gt;legend_ext -->
   222  <!-- Gubernator&#45;&gt;Testgrid (closed) -->
   223  <g id="edge5" class="edge">
   224  <title>Gubernator&#45;&gt;Testgrid (closed)</title>
   225  <path fill="none" stroke="black" d="M979.36,-519.76C979.36,-497.55 979.36,-465.06 979.36,-445.38"/>
   226  <polygon fill="black" stroke="black" points="975.86,-520.03 979.36,-530.03 982.86,-520.03 975.86,-520.03"/>
   227  </g>
   228  <!-- Velodrome -->
   229  <g id="node11" class="node">
   230  <title>Velodrome</title>
   231  <polygon fill="lightblue" stroke="black" points="565.86,-23.56 494.36,-36 422.86,-23.56 422.93,-3.44 565.79,-3.44 565.86,-23.56"/>
   232  <text text-anchor="middle" x="494.36" y="-14.3" font-family="Times-Roman" font-size="14.00">Velodrome</text>
   233  </g>
   234  <!-- Boskos -->
   235  <g id="node12" class="node">
   236  <title>Boskos</title>
   237  <polygon fill="lightblue" stroke="black" points="364.8,-649.78 312.36,-662.22 259.92,-649.78 259.97,-629.65 364.75,-629.65 364.8,-649.78"/>
   238  <text text-anchor="middle" x="312.36" y="-640.52" font-family="Times-Roman" font-size="14.00">Boskos</text>
   239  </g>
   240  <!-- GCE -->
   241  <g id="node15" class="node">
   242  <title>GCE</title>
   243  <polygon fill="gray" stroke="black" points="68.6,-419.89 68.6,-434.8 49.71,-445.35 23.01,-445.35 4.12,-434.8 4.12,-419.89 23.01,-409.35 49.71,-409.35 68.6,-419.89"/>
   244  <polygon fill="none" stroke="black" points="72.58,-417.54 72.58,-437.15 50.75,-449.35 21.97,-449.35 0.14,-437.15 0.14,-417.54 21.97,-405.35 50.75,-405.35 72.58,-417.54"/>
   245  <text text-anchor="middle" x="36.36" y="-423.65" font-family="Times-Roman" font-size="14.00">GCE</text>
   246  </g>
   247  <!-- Boskos&#45;&gt;GCE -->
   248  <g id="edge30" class="edge">
   249  <title>Boskos&#45;&gt;GCE</title>
   250  <path fill="none" stroke="black" d="M284.22,-623.53C268.27,-612.23 248.03,-597.65 230.36,-584.22 170.74,-538.87 102.89,-483.44 65.3,-452.4"/>
   251  <polygon fill="black" stroke="black" points="282.41,-626.53 292.6,-629.44 286.45,-620.81 282.41,-626.53"/>
   252  <polygon fill="black" stroke="black" points="67.25,-449.46 57.31,-445.79 62.79,-454.86 67.25,-449.46"/>
   253  </g>
   254  <!-- Boskos&#45;&gt;GKE -->
   255  <g id="edge31" class="edge">
   256  <title>Boskos&#45;&gt;GKE</title>
   257  <path fill="none" stroke="black" d="M321.29,-619.95C331.88,-592.47 350.13,-545.41 366.36,-505.22 372.56,-489.86 379.62,-472.85 385.53,-458.75"/>
   258  <polygon fill="black" stroke="black" points="317.95,-618.88 317.63,-629.47 324.49,-621.39 317.95,-618.88"/>
   259  <polygon fill="black" stroke="black" points="388.77,-460.08 389.41,-449.5 382.31,-457.37 388.77,-460.08"/>
   260  </g>
   261  <!-- ProwJobs -->
   262  <g id="node21" class="node">
   263  <title>ProwJobs</title>
   264  <polygon fill="#1e90ff" stroke="black" points="318.86,-584.22 239.86,-584.22 239.86,-505.22 318.86,-505.22 318.86,-584.22"/>
   265  <text text-anchor="middle" x="279.36" y="-541.02" font-family="Times-Roman" font-size="14.00">ProwJobs</text>
   266  </g>
   267  <!-- Boskos&#45;&gt;ProwJobs -->
   268  <g id="edge29" class="edge">
   269  <title>Boskos&#45;&gt;ProwJobs</title>
   270  <path fill="none" stroke="black" d="M304.35,-619.55C301.73,-611.82 298.73,-602.93 295.72,-594.06"/>
   271  <polygon fill="black" stroke="black" points="301.11,-620.9 307.63,-629.25 307.74,-618.65 301.11,-620.9"/>
   272  <polygon fill="black" stroke="black" points="299.01,-592.85 292.49,-584.5 292.38,-595.1 299.01,-592.85"/>
   273  </g>
   274  <!-- Prometheus -->
   275  <g id="node24" class="node">
   276  <title>Prometheus</title>
   277  <path fill="#fafafa" stroke="black" d="M474.86,-559.44C474.86,-561.25 452.67,-562.72 425.36,-562.72 398.05,-562.72 375.86,-561.25 375.86,-559.44 375.86,-559.44 375.86,-529.99 375.86,-529.99 375.86,-528.18 398.05,-526.72 425.36,-526.72 452.67,-526.72 474.86,-528.18 474.86,-529.99 474.86,-529.99 474.86,-559.44 474.86,-559.44"/>
   278  <path fill="none" stroke="black" d="M474.86,-559.44C474.86,-557.64 452.67,-556.17 425.36,-556.17 398.05,-556.17 375.86,-557.64 375.86,-559.44"/>
   279  <text text-anchor="middle" x="425.36" y="-541.02" font-family="Times-Roman" font-size="14.00">Prometheus</text>
   280  </g>
   281  <!-- Boskos&#45;&gt;Prometheus -->
   282  <g id="edge28" class="edge">
   283  <title>Boskos&#45;&gt;Prometheus</title>
   284  <path fill="none" stroke="black" d="M329.76,-629.35C339.2,-621.74 351.02,-612.08 361.36,-603.22 373.99,-592.4 387.73,-580.12 399.24,-569.69"/>
   285  <polygon fill="black" stroke="black" points="401.76,-572.13 406.8,-562.81 397.05,-566.95 401.76,-572.13"/>
   286  </g>
   287  <!-- Greenhouse -->
   288  <g id="node13" class="node">
   289  <title>Greenhouse</title>
   290  <polygon fill="lightblue" stroke="black" points="251.54,-432.91 171.36,-445.35 91.19,-432.91 91.26,-412.78 251.46,-412.78 251.54,-432.91"/>
   291  <text text-anchor="middle" x="171.36" y="-423.65" font-family="Times-Roman" font-size="14.00">Greenhouse</text>
   292  </g>
   293  <!-- legend_cloud -->
   294  <g id="node14" class="node">
   295  <title>legend_cloud</title>
   296  <ellipse fill="none" stroke="black" cx="1031.36" cy="-291" rx="77.56" ry="37.45"/>
   297  <text text-anchor="middle" x="1031.36" y="-302.3" font-family="Times-Roman" font-size="14.00">Cloud</text>
   298  <text text-anchor="middle" x="1031.36" y="-287.3" font-family="Times-Roman" font-size="14.00">or</text>
   299  <text text-anchor="middle" x="1031.36" y="-272.3" font-family="Times-Roman" font-size="14.00">Cloud service</text>
   300  </g>
   301  <!-- AWS -->
   302  <g id="node17" class="node">
   303  <title>AWS</title>
   304  <polygon fill="gray" stroke="black" points="340.92,-419.89 340.92,-434.8 321.26,-445.35 293.46,-445.35 273.8,-434.8 273.8,-419.89 293.46,-409.35 321.26,-409.35 340.92,-419.89"/>
   305  <polygon fill="none" stroke="black" points="344.9,-417.49 344.9,-437.2 322.26,-449.35 292.47,-449.35 269.82,-437.2 269.82,-417.49 292.47,-405.35 322.26,-405.35 344.9,-417.49"/>
   306  <text text-anchor="middle" x="307.36" y="-423.65" font-family="Times-Roman" font-size="14.00">AWS</text>
   307  </g>
   308  <!-- legend_prowjob -->
   309  <g id="node18" class="node">
   310  <title>legend_prowjob</title>
   311  <ellipse fill="none" stroke="black" cx="884.36" cy="-291" rx="51.19" ry="18"/>
   312  <text text-anchor="middle" x="884.36" y="-287.3" font-family="Times-Roman" font-size="14.00">ProwJobs</text>
   313  </g>
   314  <!-- InfluxDB -->
   315  <g id="node23" class="node">
   316  <title>InfluxDB</title>
   317  <path fill="#fafafa" stroke="black" d="M532.86,-105.73C532.86,-107.53 515.6,-109 494.36,-109 473.12,-109 455.86,-107.53 455.86,-105.73 455.86,-105.73 455.86,-76.27 455.86,-76.27 455.86,-74.47 473.12,-73 494.36,-73 515.6,-73 532.86,-74.47 532.86,-76.27 532.86,-76.27 532.86,-105.73 532.86,-105.73"/>
   318  <path fill="none" stroke="black" d="M532.86,-105.73C532.86,-103.92 515.6,-102.45 494.36,-102.45 473.12,-102.45 455.86,-103.92 455.86,-105.73"/>
   319  <text text-anchor="middle" x="494.36" y="-87.3" font-family="Times-Roman" font-size="14.00">InfluxDB</text>
   320  </g>
   321  <!-- Metrics&#45;&gt;InfluxDB -->
   322  <g id="edge24" class="edge">
   323  <title>Metrics&#45;&gt;InfluxDB</title>
   324  <path fill="none" stroke="black" d="M1174.4,-174.39C1058.66,-160.36 679.3,-114.4 543.37,-97.94"/>
   325  <polygon fill="black" stroke="black" points="543.6,-94.44 533.25,-96.71 542.75,-101.39 543.6,-94.44"/>
   326  </g>
   327  <!-- ProwJobs&#45;&gt;Greenhouse -->
   328  <g id="edge35" class="edge">
   329  <title>ProwJobs&#45;&gt;Greenhouse</title>
   330  <path fill="none" stroke="black" d="M236.03,-497.43C220.98,-481.35 204.78,-464.04 192.35,-450.77"/>
   331  <polygon fill="black" stroke="black" points="233.71,-500.07 243.1,-504.98 238.82,-495.29 233.71,-500.07"/>
   332  <polygon fill="black" stroke="black" points="194.9,-448.37 185.51,-443.47 189.79,-453.16 194.9,-448.37"/>
   333  </g>
   334  <!-- ProwJobs&#45;&gt;GCE -->
   335  <g id="edge34" class="edge">
   336  <title>ProwJobs&#45;&gt;GCE</title>
   337  <path fill="none" stroke="black" d="M230.34,-522.84C190.14,-505.39 131.99,-479.39 82.36,-454.22 78.59,-452.31 74.69,-450.24 70.82,-448.15"/>
   338  <polygon fill="black" stroke="black" points="229.08,-526.11 239.64,-526.87 231.85,-519.69 229.08,-526.11"/>
   339  <polygon fill="black" stroke="black" points="72.39,-445.01 61.94,-443.24 69,-451.14 72.39,-445.01"/>
   340  </g>
   341  <!-- ProwJobs&#45;&gt;GKE -->
   342  <g id="edge33" class="edge">
   343  <title>ProwJobs&#45;&gt;GKE</title>
   344  <path fill="none" stroke="black" d="M313.45,-497C320.61,-488.37 328.41,-479.73 336.36,-472.22 345.11,-463.95 355.5,-456.01 365.25,-449.2"/>
   345  <polygon fill="black" stroke="black" points="310.64,-494.91 307.08,-504.89 316.08,-499.31 310.64,-494.91"/>
   346  <polygon fill="black" stroke="black" points="367.29,-452.05 373.6,-443.53 363.36,-446.26 367.29,-452.05"/>
   347  </g>
   348  <!-- ProwJobs&#45;&gt;AWS -->
   349  <g id="edge32" class="edge">
   350  <title>ProwJobs&#45;&gt;AWS</title>
   351  <path fill="none" stroke="black" d="M291.12,-495.25C294.05,-483.2 297.11,-470.6 299.77,-459.62"/>
   352  <polygon fill="black" stroke="black" points="287.72,-494.44 288.76,-504.98 294.52,-496.09 287.72,-494.44"/>
   353  <polygon fill="black" stroke="black" points="303.23,-460.21 302.19,-449.67 296.43,-458.56 303.23,-460.21"/>
   354  </g>
   355  <!-- legend_stock -->
   356  <g id="node22" class="node">
   357  <title>legend_stock</title>
   358  <ellipse fill="none" stroke="black" cx="745.36" cy="-291" rx="69.59" ry="18"/>
   359  <text text-anchor="middle" x="745.36" y="-287.3" font-family="Times-Roman" font-size="14.00">Hosted stock</text>
   360  </g>
   361  <!-- InfluxDB&#45;&gt;Velodrome -->
   362  <g id="edge26" class="edge">
   363  <title>InfluxDB&#45;&gt;Velodrome</title>
   364  <path fill="none" stroke="black" d="M494.36,-72.81C494.36,-64.79 494.36,-55.05 494.36,-46.07"/>
   365  <polygon fill="black" stroke="black" points="497.86,-46.03 494.36,-36.03 490.86,-46.03 497.86,-46.03"/>
   366  </g>
   367  <!-- Prometheus&#45;&gt;InfluxDB -->
   368  <g id="edge25" class="edge">
   369  <title>Prometheus&#45;&gt;InfluxDB</title>
   370  <path fill="none" stroke="black" d="M440.04,-526.64C456.93,-505.19 482.36,-466.55 482.36,-428.35 482.36,-428.35 482.36,-428.35 482.36,-178.5 482.36,-158.6 485.51,-136.37 488.59,-119.43"/>
   371  <polygon fill="black" stroke="black" points="492.12,-119.62 490.56,-109.14 485.24,-118.3 492.12,-119.62"/>
   372  </g>
   373  <!-- Hook&#45;&gt;ApiServer -->
   374  <g id="edge11" class="edge">
   375  <title>Hook&#45;&gt;ApiServer</title>
   376  <path fill="none" stroke="black" d="M797.13,-1023.83C778.11,-1015.75 757.03,-1006.16 738.36,-996.17 707.31,-979.56 673.98,-957.95 648.85,-940.8"/>
   377  <polygon fill="black" stroke="black" points="650.54,-937.72 640.31,-934.94 646.57,-943.49 650.54,-937.72"/>
   378  <text text-anchor="middle" x="789.86" y="-977.47" font-family="Times-Roman" font-size="14.00">create ProwJob</text>
   379  </g>
   380  <!-- Plank -->
   381  <g id="node26" class="node">
   382  <title>Plank</title>
   383  <ellipse fill="none" stroke="black" cx="467.36" cy="-1047.38" rx="99.9" ry="26.74"/>
   384  <text text-anchor="middle" x="467.36" y="-1051.18" font-family="Times-Roman" font-size="14.00">Plank</text>
   385  <text text-anchor="middle" x="467.36" y="-1036.18" font-family="Times-Roman" font-size="14.00">ProwJob controller</text>
   386  </g>
   387  <!-- Plank&#45;&gt;GitHub\nthrough\nghproxy -->
   388  <g id="edge7" class="edge">
   389  <title>Plank&#45;&gt;GitHub\nthrough\nghproxy</title>
   390  <path fill="none" stroke="black" d="M980.36,-950.12C982.32,-949.15 984.28,-948.17 986.24,-947.2"/>
   391  <polygon fill="black" stroke="black" points="980.8,-953.81 988.19,-946.22 977.68,-947.55 980.8,-953.81"/>
   392  <text text-anchor="middle" x="923.86" y="-984.97" font-family="Times-Roman" font-size="14.00">update PR status</text>
   393  <text text-anchor="middle" x="923.86" y="-969.97" font-family="Times-Roman" font-size="14.00">comment failures</text>
   394  </g>
   395  <!-- Plank&#45;&gt;Prometheus -->
   396  <g id="edge27" class="edge">
   397  <title>Plank&#45;&gt;Prometheus</title>
   398  <path fill="none" stroke="black" d="M425.36,-740.22C425.36,-712.57 425.36,-680.47 425.36,-643.22 425.36,-619.51 425.36,-592.56 425.36,-573.01"/>
   399  <polygon fill="black" stroke="black" points="428.86,-572.98 425.36,-562.98 421.86,-572.98 428.86,-572.98"/>
   400  </g>
   401  <!-- Plank&#45;&gt;ApiServer -->
   402  <g id="edge8" class="edge">
   403  <title>Plank&#45;&gt;ApiServer</title>
   404  <path fill="none" stroke="black" d="M493.55,-1021.45C516.65,-999.47 550.41,-967.33 575.35,-943.59"/>
   405  <polygon fill="black" stroke="black" points="577.96,-945.94 582.79,-936.51 573.13,-940.87 577.96,-945.94"/>
   406  </g>
   407  <!-- Sinker -->
   408  <g id="node27" class="node">
   409  <title>Sinker</title>
   410  <ellipse fill="none" stroke="black" cx="608.36" cy="-785.69" rx="82.96" ry="37.45"/>
   411  <text text-anchor="middle" x="608.36" y="-796.99" font-family="Times-Roman" font-size="14.00">Sinker</text>
   412  <text text-anchor="middle" x="608.36" y="-781.99" font-family="Times-Roman" font-size="14.00">deletes old</text>
   413  <text text-anchor="middle" x="608.36" y="-766.99" font-family="Times-Roman" font-size="14.00">pods/ProwJobs</text>
   414  </g>
   415  <!-- Horologium -->
   416  <g id="node28" class="node">
   417  <title>Horologium</title>
   418  <ellipse fill="none" stroke="black" cx="840.36" cy="-785.69" rx="131.54" ry="26.74"/>
   419  <text text-anchor="middle" x="840.36" y="-789.49" font-family="Times-Roman" font-size="14.00">Horologium</text>
   420  <text text-anchor="middle" x="840.36" y="-774.49" font-family="Times-Roman" font-size="14.00">create periodic ProwJobs</text>
   421  </g>
   422  <!-- Job -->
   423  <g id="node29" class="node">
   424  <title>Job</title>
   425  <ellipse fill="none" stroke="black" cx="480.36" cy="-785.69" rx="27" ry="18"/>
   426  <text text-anchor="middle" x="480.36" y="-781.99" font-family="Times-Roman" font-size="14.00">Job</text>
   427  </g>
   428  <!-- Job&#45;&gt;GCS -->
   429  <g id="edge6" class="edge">
   430  <title>Job&#45;&gt;GCS</title>
   431  <path fill="none" stroke="black" d="M496.94,-760.97C502.61,-753.81 509.31,-746.25 516.36,-740.22 557.38,-705.12 613.19,-675.99 647.98,-659.59"/>
   432  <polygon fill="black" stroke="black" points="494.05,-758.99 490.81,-769.08 499.63,-763.21 494.05,-758.99"/>
   433  <polygon fill="black" stroke="black" points="649.6,-662.7 657.2,-655.31 646.66,-656.35 649.6,-662.7"/>
   434  <text text-anchor="middle" x="690.86" y="-719.02" font-family="Times-Roman" font-size="14.00">publish</text>
   435  <text text-anchor="middle" x="690.86" y="-704.02" font-family="Times-Roman" font-size="14.00">started.json, finished.json,</text>
   436  <text text-anchor="middle" x="690.86" y="-689.02" font-family="Times-Roman" font-size="14.00">build&#45;log.txt, artifacts/</text>
   437  </g>
   438  <!-- ApiServer&#45;&gt;Sinker -->
   439  <g id="edge13" class="edge">
   440  <title>ApiServer&#45;&gt;Sinker</title>
   441  <path fill="none" stroke="black" d="M608.36,-874.23C608.36,-858.23 608.36,-839.4 608.36,-823.32"/>
   442  <polygon fill="black" stroke="black" points="604.86,-874.29 608.36,-884.29 611.86,-874.29 604.86,-874.29"/>
   443  </g>
   444  <!-- ApiServer&#45;&gt;Horologium -->
   445  <g id="edge14" class="edge">
   446  <title>ApiServer&#45;&gt;Horologium</title>
   447  <path fill="none" stroke="black" d="M658.47,-883.5C698.98,-861.94 755.52,-831.85 794.77,-810.96"/>
   448  <polygon fill="black" stroke="black" points="656.75,-880.45 649.57,-888.24 660.04,-886.63 656.75,-880.45"/>
   449  </g>
   450  <!-- ApiServer&#45;&gt;Job -->
   451  <g id="edge12" class="edge">
   452  <title>ApiServer&#45;&gt;Job</title>
   453  <path fill="none" stroke="black" d="M574.35,-884.61C563.47,-875.96 551.61,-865.99 541.36,-856.17 526.15,-841.59 510.51,-823.7 498.87,-809.73"/>
   454  <polygon fill="black" stroke="black" points="501.57,-807.5 492.51,-802 496.16,-811.95 501.57,-807.5"/>
   455  <text text-anchor="middle" x="572.86" y="-844.97" font-family="Times-Roman" font-size="14.00">start Pod</text>
   456  </g>
   457  <!-- Kettle&#45;&gt;BigQuery -->
   458  <g id="edge17" class="edge">
   459  <title>Kettle&#45;&gt;BigQuery</title>
   460  <path fill="none" stroke="black" d="M1298.94,-400.44C1309.79,-383.5 1324.3,-360.83 1337.25,-340.6"/>
   461  <polygon fill="black" stroke="black" points="1340.25,-342.41 1342.69,-332.1 1334.35,-338.64 1340.25,-342.41"/>
   462  <text text-anchor="middle" x="1334.86" y="-371.28" font-family="Times-Roman" font-size="14.00">write</text>
   463  </g>
   464  <!-- Splice -->
   465  <g id="node32" class="node">
   466  <title>Splice</title>
   467  <ellipse fill="none" stroke="black" cx="312.36" cy="-1047.38" rx="37.89" ry="18"/>
   468  <text text-anchor="middle" x="312.36" y="-1043.68" font-family="Times-Roman" font-size="14.00">Splice</text>
   469  </g>
   470  <!-- Splice&#45;&gt;ApiServer -->
   471  <g id="edge9" class="edge">
   472  <title>Splice&#45;&gt;ApiServer</title>
   473  <path fill="none" stroke="black" d="M331.44,-1031.59C339.48,-1025.73 349.12,-1019.21 358.36,-1014.17 418.68,-981.29 491.87,-952.62 543.42,-934.13"/>
   474  <polygon fill="black" stroke="black" points="544.86,-937.33 553.11,-930.68 542.52,-930.73 544.86,-937.33"/>
   475  </g>
   476  </g>
   477  </svg>