github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/scripts/screenshots/src/index.js (about)

     1  const puppeteer = require("puppeteer");
     2  const {
     3    capture,
     4    wait,
     5    error,
     6    click,
     7    clickJob,
     8    clickTab,
     9    clickMainMenu,
    10    clickX
    11  } = require("./utils");
    12  
    13  const HOST = process.env.EMBER_HOST || "http://localhost:4200";
    14  console.log(`Using host ${HOST}...`);
    15  
    16  const ANSI_YELLOW = "\x1b[33m%s\x1b[0m";
    17  
    18  (async () => {
    19    const startTime = Date.now();
    20    console.log("Preparing puppeteer...");
    21  
    22    // Create a new browser and tab
    23    const browser = await puppeteer.launch({
    24      // Docker related chrome flags
    25      args: [
    26        "--no-sandbox",
    27        "--disable-setuid-sandbox",
    28        "--disable-dev-shm-usage",
    29        "--remote-debugging-port=9222",
    30      ]
    31    });
    32    const page = await browser.newPage();
    33  
    34    // Make sure the page is 4K is high-dpi scaling
    35    page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 2 });
    36    console.log("Loading Nomad UI...");
    37    console.log(
    38      ANSI_YELLOW,
    39      "\n!! Make sure to use the everyFeature Mirage scenario !!\n"
    40    );
    41  
    42    try {
    43      await page.goto(`${HOST}/ui/`);
    44    } catch (err) {
    45      await error(
    46        browser,
    47        "Could not load the Nomad UI. Is the Ember server running?"
    48      );
    49    }
    50  
    51    // Give Mirage a chance to settle
    52    console.log("Waiting for Mirage...");
    53    await wait(5000);
    54    console.log("Starting capture sequence!\n");
    55  
    56    // DEBUG: log the URL on all navigations
    57    monitorURL(page);
    58  
    59    await capture(page, "jobs-list");
    60  
    61    await clickJob(page, "service");
    62    await capture(page, "job-detail-service");
    63    await page.goBack();
    64  
    65    await clickJob(page, "batch");
    66    await capture(page, "job-detail-batch");
    67    await page.goBack();
    68  
    69    await clickJob(page, "system");
    70    await capture(page, "job-detail-system");
    71    await page.goBack();
    72  
    73    await clickJob(page, "periodic");
    74    await capture(page, "job-detail-periodic");
    75    await click(page, "tr.job-row");
    76    await capture(page, "job-detail-periodic-child");
    77    await page.goBack();
    78    await page.goBack();
    79  
    80    await clickJob(page, "parameterized");
    81    await capture(page, "job-detail-parameterized");
    82    await click(page, "tr.job-row");
    83    await capture(page, "job-detail-parameterized-child");
    84    await page.goBack();
    85    await page.goBack();
    86  
    87    await clickJob(page, "service");
    88  
    89    await clickTab(page, "Definition");
    90    await capture(page, "job-detail-tab-definition");
    91    await page.click(".boxed-section .button.is-light.is-compact.pull-right");
    92    await capture(page, "job-detail-tab-definition-editing");
    93  
    94    await clickTab(page, "Versions");
    95    await capture(page, "job-detail-tab-versions");
    96    await page.click(".timeline-object .button.is-light.is-compact.pull-right");
    97    await capture(page, "job-detail-tab-versions-expanded");
    98  
    99    await clickTab(page, "Deployments");
   100    await capture(page, "job-detail-tab-deployments");
   101    await page.click(".timeline-object .button.is-light.is-compact.pull-right");
   102    await capture(page, "job-detail-tab-deployments-expanded");
   103  
   104    await clickTab(page, "Allocations");
   105    await capture(page, "job-detail-tab-allocations");
   106  
   107    await clickTab(page, "Evaluations");
   108    await capture(page, "job-detail-tab-evaluations");
   109  
   110    await clickMainMenu(page, "Jobs");
   111    await page.click(".toolbar-item .button.is-primary");
   112    await capture(page, "job-run-empty");
   113    // Fill in the code editor somehow
   114    // Capture the plan stage
   115  
   116    await clickMainMenu(page, "Jobs");
   117    await clickJob(page, "service");
   118    await click(page, ".task-group-row");
   119    await capture(page, "task-group");
   120  
   121    await clickMainMenu(page, "Jobs");
   122    await clickJob(page, "service");
   123  
   124    const allocCount = await page.$$eval(".allocation-row", s => s.length);
   125    for (let i = 1; i <= allocCount; i++) {
   126      await click(page, `.allocation-row:nth-of-type(${i}) a.is-primary`);
   127      await capture(page, `allocation-${i}`);
   128      await page.goBack();
   129      await wait(2000);
   130    }
   131  
   132    await click(page, ".allocation-row a.is-primary");
   133    await click(page, ".task-row");
   134    await capture(page, "task-detail");
   135  
   136    await clickTab(page, "Logs");
   137    await capture(page, "task-logs");
   138  
   139    await clickMainMenu(page, "Clients");
   140    await capture(page, "clients-list");
   141  
   142    const clientCount = await page.$$eval(".client-node-row", s => s.length);
   143    for (let i = 1; i <= clientCount; i++) {
   144      await click(page, `.client-node-row:nth-of-type(${i})`);
   145      await capture(page, `client-detail-${i}`);
   146      await page.goBack();
   147      await wait(500);
   148    }
   149  
   150    await clickMainMenu(page, "Servers");
   151    await capture(page, "servers-list");
   152  
   153    await click(page, `.server-agent-row:nth-of-type(2)`);
   154    await capture(page, "server-detail");
   155  
   156    await clickX(page, '//a[contains(text(), "ACL Tokens")]');
   157    await capture(page, "acl-tokens");
   158  
   159    console.log(`All done! ${humanDuration(Date.now() - startTime)}`);
   160    process.exit();
   161  })();
   162  
   163  async function* watchURL(page) {
   164    while (true) {
   165      await page.waitForNavigation();
   166      yield page.url();
   167    }
   168  }
   169  
   170  async function monitorURL(page) {
   171    for await (let url of watchURL(page)) {
   172      console.log(`=> ${url}`);
   173    }
   174  }
   175  
   176  function humanDuration(duration) {
   177    const ms = duration % 1000;
   178    const s = Math.floor((duration / 1000) % 60);
   179    const m = Math.floor(duration / 1000 / 60);
   180  
   181    const fs = s < 10 ? `0${s}` : `${s}`;
   182    const fms = ms < 10 ? `00${ms}` : ms < 100 ? `0${ms}` : `${ms}`;
   183  
   184    if (m) return `${m}m ${fs}s ${fms}ms`;
   185    else if (s) return `${fs}s ${fms}ms`;
   186    return `${fms}ms`;
   187  }