sitespeed.io 33.6.0 → 34.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/building-docker-release.yml +0 -11
- package/CHANGELOG.md +26 -0
- package/Dockerfile +1 -1
- package/bin/sitespeed.js +8 -0
- package/lib/cli/cli.js +10 -33
- package/lib/core/pluginLoader.js +1 -1
- package/lib/plugins/analysisstorer/index.js +0 -2
- package/lib/plugins/budget/index.js +0 -1
- package/lib/plugins/domains/index.js +0 -8
- package/lib/plugins/grafana/index.js +1 -17
- package/lib/plugins/grafana/send-annotation.js +1 -7
- package/lib/plugins/graphite/data-generator.js +0 -7
- package/lib/plugins/graphite/index.js +2 -23
- package/lib/plugins/graphite/send-annotation.js +1 -6
- package/lib/plugins/harstorer/index.js +1 -2
- package/lib/plugins/html/defaultConfig.js +0 -7
- package/lib/plugins/html/htmlBuilder.js +6 -5
- package/lib/plugins/html/index.js +0 -4
- package/lib/plugins/html/setup/detailed.js +0 -23
- package/lib/plugins/html/setup/summaryBoxesDefaultLimits.js +0 -8
- package/lib/plugins/html/templates/header.pug +1 -1
- package/lib/plugins/html/templates/runInfo.pug +0 -3
- package/lib/plugins/html/templates/settings.pug +4 -0
- package/lib/plugins/html/templates/url/includes/pageRunInfo.pug +0 -3
- package/lib/plugins/html/templates/url/iteration/index.pug +1 -23
- package/lib/plugins/html/templates/url/summary/index.pug +0 -21
- package/lib/plugins/influxdb/data-generator.js +0 -28
- package/lib/plugins/influxdb/index.js +0 -16
- package/lib/plugins/influxdb/send-annotation.js +1 -8
- package/lib/plugins/messagelogger/index.js +0 -1
- package/lib/plugins/pagexray/index.js +2 -10
- package/lib/plugins/s3/index.js +67 -87
- package/lib/sitespeed.js +2 -1
- package/lib/support/annotationsHelper.js +1 -8
- package/lib/support/friendlynames.js +0 -39
- package/npm-shrinkwrap.json +6604 -12650
- package/package.json +4 -4
- package/lib/plugins/tracestorer/index.js +0 -36
|
@@ -48,17 +48,6 @@ jobs:
|
|
|
48
48
|
push: true
|
|
49
49
|
provenance: false
|
|
50
50
|
tags: sitespeedio/sitespeed.io:${{steps.tag.outputs.tag}}-plus1
|
|
51
|
-
-
|
|
52
|
-
name: Build and push sitespeed.io+wpt
|
|
53
|
-
uses: docker/build-push-action@v5
|
|
54
|
-
with:
|
|
55
|
-
context: .
|
|
56
|
-
platforms: linux/amd64,linux/arm64
|
|
57
|
-
file: ./docker/Dockerfile-webpagetest
|
|
58
|
-
build-args: version=${{steps.tag.outputs.tag}}
|
|
59
|
-
push: true
|
|
60
|
-
provenance: false
|
|
61
|
-
tags: sitespeedio/sitespeed.io:${{steps.tag.outputs.tag}}-webpagetest
|
|
62
51
|
-
|
|
63
52
|
name: Build and push sitespeed.io-slim
|
|
64
53
|
uses: docker/build-push-action@v5
|
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,31 @@
|
|
|
1
1
|
# CHANGELOG - sitespeed.io (we use [semantic versioning](https://semver.org))
|
|
2
2
|
|
|
3
|
+
## 34.0.0 - 2024-05-29
|
|
4
|
+
|
|
5
|
+
### Breaking
|
|
6
|
+
|
|
7
|
+
* Woho! There's now a way to deploy your own version of sitespeed.io online for your own testing using [onlinetest)[https://github.com/sitespeedio/onlinetest]! It has a HTML GUI and an API that you can use using sitespeed.io command line. There's one server part (the frontend and the API) and a testrunner part. You can run desktop, emulated mobile and Android test. I do not host a global version but I worked hard to make it easy to host yourself. I still work on the documentation but feel free to start to try it out before all documentation is finished :) If you have quick question and need help, please use the [Slack channel](https://join.slack.com/t/sitespeedio/shared_invite/zt-296jzr7qs-d6DId2KpEnMPJSQ8_R~WFw). If you have more complicated problems, please feel free to create issues [here](https://github.com/sitespeedio/onlinetest/issues/new).
|
|
8
|
+
|
|
9
|
+
* With this release we remove all dependencies to WebPageTest [#4085](https://github.com/sitespeedio/sitespeed.io/pull/4085). You are only affected if you used the [plugin-webpagetest](https://github.com/sitespeedio/plugin-webpagetest) or the +webpagetest Docker container. If you still want to use WebPageTest with sitespeed.io you can build something on the archived [plugin-webpagetest](https://github.com/sitespeedio/plugin-webpagetest).
|
|
10
|
+
|
|
11
|
+
* The S3 plugin has been upgraded to @aws-sdk/client-s3 v3 [#4138](https://github.com/sitespeedio/sitespeed.io/pull/4138). If you are using the S3 plugin and not set region, that will now fail. The v2 version of the aws-sdk used us-east-1 region as default, but v3 has removed the default setting. If you didn't used to set region you can add `--s3.region us-east-1` and it will work as before. If you do not do that, the uploads to S3 will fail.
|
|
12
|
+
|
|
13
|
+
* The -plus1 Docker container now has plugin-lighthouse and plugin-gpsi installed from npm instead of the git repository. It will work as before, but if you want to disable one of them, that has changed. To not run the GPSI plugin add `--plugins.remove @sitespeed.io/plugin-gpsi` and to disble Lighthouse you add `--plugins.remove @sitespeed.io/plugin-lighthouse`.
|
|
14
|
+
|
|
15
|
+
* Updated to [Browsertime 22](https://github.com/sitespeedio/browsertime/blob/main/CHANGELOG.md#2200---2024-05-16). This version of Browsertime drops the Browsertime extension and start use the kind of new HAR exporter using Bidi as the default HAR exporter! If you add request headers to your Firefox test or clear the cache inside of your script using Firefox, this will stop to work for now until support is added in Firefox (request headers are coming soon!).
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
* Updated to Chrome 125, Firefox 126 and Edge 124 in the Docker container [#4156](https://github.com/sitespeedio/sitespeed.io/pull/4156).
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
* Fix loading globally installed plugins [#4167](https://github.com/sitespeedio/sitespeed.io/pull/4167).
|
|
22
|
+
* Fix configurations documentation for scp, thank you [Arash Hatam](https://github.com/hatamiarash7) for [#4166](https://github.com/sitespeedio/sitespeed.io/pull/4166).
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
## 33.6.1 - 2024-05-13
|
|
26
|
+
### Fixed
|
|
27
|
+
* The plus1 container was updated with the latest version of the gpsi-plugin, since the old version broke when GPSI was updated to Lighthouse 12.
|
|
28
|
+
|
|
3
29
|
## 33.6.0 - 2024-04-17
|
|
4
30
|
### Added
|
|
5
31
|
* Updated to Chrome 124 and Firefox 125 in the Docker container [#4142](https://github.com/sitespeedio/sitespeed.io/pull/4142) and [#4142](https://github.com/sitespeedio/sitespeed.io/pull/4141).
|
package/Dockerfile
CHANGED
package/bin/sitespeed.js
CHANGED
|
@@ -7,6 +7,7 @@ import { execSync } from 'node:child_process';
|
|
|
7
7
|
import { platform } from 'node:os';
|
|
8
8
|
import { resolve, basename } from 'node:path';
|
|
9
9
|
import { readFileSync } from 'node:fs';
|
|
10
|
+
import { EventEmitter } from 'node:events';
|
|
10
11
|
|
|
11
12
|
import merge from 'lodash.merge';
|
|
12
13
|
import ora from 'ora';
|
|
@@ -15,6 +16,10 @@ import { parseCommandLine } from '../lib/cli/cli.js';
|
|
|
15
16
|
import { run } from '../lib/sitespeed.js';
|
|
16
17
|
import { addTest, waitAndGetResult, get } from '../lib/api/send.js';
|
|
17
18
|
|
|
19
|
+
// This is due to CDP do no have (or has it) a way to remove listeners
|
|
20
|
+
// and default 10 is quite small number.
|
|
21
|
+
EventEmitter.defaultMaxListeners = 30;
|
|
22
|
+
|
|
18
23
|
async function api(options) {
|
|
19
24
|
const action = options.api.action ?? 'addAndGetResult';
|
|
20
25
|
|
|
@@ -91,6 +96,9 @@ async function api(options) {
|
|
|
91
96
|
}
|
|
92
97
|
} else if (result.status === 'failed') {
|
|
93
98
|
spinner.fail('Test failed');
|
|
99
|
+
if (options.api.json) {
|
|
100
|
+
console.log(JSON.stringify(result));
|
|
101
|
+
}
|
|
94
102
|
process.exitCode = 1;
|
|
95
103
|
process.exit();
|
|
96
104
|
}
|
package/lib/cli/cli.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { resolve } from 'node:path';
|
|
2
2
|
import { platform } from 'node:os';
|
|
3
3
|
import { createRequire } from 'node:module';
|
|
4
|
-
import { readFileSync, statSync
|
|
4
|
+
import { readFileSync, statSync } from 'node:fs';
|
|
5
5
|
|
|
6
6
|
import yargs from 'yargs';
|
|
7
7
|
import { hideBin } from 'yargs/helpers';
|
|
@@ -1145,7 +1145,7 @@ export async function parseCommandLine() {
|
|
|
1145
1145
|
describe: 'The host.',
|
|
1146
1146
|
group: 'scp'
|
|
1147
1147
|
})
|
|
1148
|
-
.option('scp.
|
|
1148
|
+
.option('scp.destinationPath', {
|
|
1149
1149
|
describe:
|
|
1150
1150
|
'The destination path on the remote server where the files will be copied.',
|
|
1151
1151
|
group: 'scp'
|
|
@@ -1213,7 +1213,7 @@ export async function parseCommandLine() {
|
|
|
1213
1213
|
default: false,
|
|
1214
1214
|
type: 'boolean',
|
|
1215
1215
|
describe:
|
|
1216
|
-
'Include screenshot (from Browsertime
|
|
1216
|
+
'Include screenshot (from Browsertime) in the annotation. You need to specify a --resultBaseURL for this to work.',
|
|
1217
1217
|
group: 'Grafana'
|
|
1218
1218
|
})
|
|
1219
1219
|
|
|
@@ -1280,7 +1280,7 @@ export async function parseCommandLine() {
|
|
|
1280
1280
|
default: false,
|
|
1281
1281
|
type: 'boolean',
|
|
1282
1282
|
describe:
|
|
1283
|
-
'Include screenshot (from Browsertime
|
|
1283
|
+
'Include screenshot (from Browsertime) in the annotation. You need to specify a --resultBaseURL for this to work.',
|
|
1284
1284
|
group: 'Graphite'
|
|
1285
1285
|
})
|
|
1286
1286
|
.option('graphite.sendAnnotation', {
|
|
@@ -1622,7 +1622,7 @@ export async function parseCommandLine() {
|
|
|
1622
1622
|
group: 's3'
|
|
1623
1623
|
})
|
|
1624
1624
|
.option('s3.region', {
|
|
1625
|
-
describe: 'The S3 region.
|
|
1625
|
+
describe: 'The S3 region.',
|
|
1626
1626
|
group: 's3'
|
|
1627
1627
|
})
|
|
1628
1628
|
.option('s3.acl', {
|
|
@@ -1789,6 +1789,11 @@ export async function parseCommandLine() {
|
|
|
1789
1789
|
default: false,
|
|
1790
1790
|
type: 'boolean'
|
|
1791
1791
|
})
|
|
1792
|
+
.option('html.homeurl', {
|
|
1793
|
+
default: 'https://www.sitespeed.io/',
|
|
1794
|
+
describe: 'The URL for the logo in the result',
|
|
1795
|
+
group: 'HTML'
|
|
1796
|
+
})
|
|
1792
1797
|
.option('summary', {
|
|
1793
1798
|
describe: 'Show brief text summary to stdout',
|
|
1794
1799
|
default: false,
|
|
@@ -2076,28 +2081,6 @@ export async function parseCommandLine() {
|
|
|
2076
2081
|
return plugins;
|
|
2077
2082
|
}
|
|
2078
2083
|
})
|
|
2079
|
-
.coerce('webpagetest', function (argument) {
|
|
2080
|
-
if (argument) {
|
|
2081
|
-
// for backwards compatible reasons we check if the passed parameters is a path to a script, if so just us it (PR #1445)
|
|
2082
|
-
if (argument.script && existsSync(argument.script)) {
|
|
2083
|
-
argument.script = readFileSync(resolve(argument.script), 'utf8');
|
|
2084
|
-
/* eslint no-console: off */
|
|
2085
|
-
console.log(
|
|
2086
|
-
'[WARNING] Since sitespeed.io 4.4 you should pass the path to the script file through the --webpagetest.file flag (https://github.com/sitespeedio/sitespeed.io/pull/1445).'
|
|
2087
|
-
);
|
|
2088
|
-
return argument;
|
|
2089
|
-
}
|
|
2090
|
-
|
|
2091
|
-
if (argument.file) {
|
|
2092
|
-
argument.script = readFileSync(resolve(argument.file), 'utf8');
|
|
2093
|
-
} else if (argument.script) {
|
|
2094
|
-
// because the escaped characters are passed re-escaped from the console
|
|
2095
|
-
argument.script = argument.script.split('\\t').join('\t');
|
|
2096
|
-
argument.script = argument.script.split('\\n').join('\n');
|
|
2097
|
-
}
|
|
2098
|
-
return argument;
|
|
2099
|
-
}
|
|
2100
|
-
})
|
|
2101
2084
|
// .describe('browser', 'Specify browser')
|
|
2102
2085
|
.wrap(yargsInstance.terminalWidth())
|
|
2103
2086
|
// .check(validateInput)
|
|
@@ -2153,12 +2136,6 @@ export async function parseCommandLine() {
|
|
|
2153
2136
|
explicitOptions = merge(explicitOptions, config);
|
|
2154
2137
|
}
|
|
2155
2138
|
|
|
2156
|
-
if (argv.webpagetest && argv.webpagetest.custom) {
|
|
2157
|
-
argv.webpagetest.custom = readFileSync(resolve(argv.webpagetest.custom), {
|
|
2158
|
-
encoding: 'utf8'
|
|
2159
|
-
});
|
|
2160
|
-
}
|
|
2161
|
-
|
|
2162
2139
|
if (argv.summaryDetail) argv.summary = true;
|
|
2163
2140
|
|
|
2164
2141
|
if (
|
package/lib/core/pluginLoader.js
CHANGED
|
@@ -77,7 +77,7 @@ export async function loadPlugins(pluginNames, options, context, queue) {
|
|
|
77
77
|
plugins.push(p);
|
|
78
78
|
} catch (error) {
|
|
79
79
|
// try global
|
|
80
|
-
let plugin = await importGlobalSilent(name);
|
|
80
|
+
let { default: plugin } = await importGlobalSilent(name);
|
|
81
81
|
if (plugin) {
|
|
82
82
|
let p = new plugin(options, context, queue);
|
|
83
83
|
plugins.push(p);
|
|
@@ -22,7 +22,6 @@ export default class BudgetPlugin extends SitespeedioPlugin {
|
|
|
22
22
|
this.make = context.messageMaker('budget').make;
|
|
23
23
|
this.budgetTypes = [
|
|
24
24
|
'browsertime.pageSummary',
|
|
25
|
-
'webpagetest.pageSummary',
|
|
26
25
|
'pagexray.pageSummary',
|
|
27
26
|
'coach.pageSummary',
|
|
28
27
|
'axe.pageSummary'
|
|
@@ -27,14 +27,6 @@ export default class DomainsPlugin extends SitespeedioPlugin {
|
|
|
27
27
|
break;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
case 'webpagetest.har': {
|
|
31
|
-
// Only collect WebPageTest data if we don't run Browsertime
|
|
32
|
-
if (this.browsertime === false) {
|
|
33
|
-
this.domainsAggregator.addToAggregate(message.data, message.url);
|
|
34
|
-
}
|
|
35
|
-
break;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
30
|
case 'sitespeedio.summarize': {
|
|
39
31
|
const summary = this.domainsAggregator.summarize();
|
|
40
32
|
if (!isEmpty(summary)) {
|
|
@@ -3,7 +3,6 @@ import dayjs from 'dayjs';
|
|
|
3
3
|
import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
|
4
4
|
|
|
5
5
|
import { send } from './send-annotation.js';
|
|
6
|
-
import { toSafeKey } from '../../support/tsdbUtil.js';
|
|
7
6
|
import { throwIfMissing } from '../../support/util.js';
|
|
8
7
|
|
|
9
8
|
export default class GrafanaPlugin extends SitespeedioPlugin {
|
|
@@ -25,13 +24,6 @@ export default class GrafanaPlugin extends SitespeedioPlugin {
|
|
|
25
24
|
}
|
|
26
25
|
|
|
27
26
|
processMessage(message, queue) {
|
|
28
|
-
if (message.type === 'webpagetest.pageSummary') {
|
|
29
|
-
this.wptExtras[message.url] = {};
|
|
30
|
-
this.wptExtras[message.url].webPageTestResultURL =
|
|
31
|
-
message.data.data.summary;
|
|
32
|
-
this.wptExtras[message.url].connectivity = message.connectivity;
|
|
33
|
-
this.wptExtras[message.url].location = toSafeKey(message.location);
|
|
34
|
-
}
|
|
35
27
|
if (this.messageTypesToFireAnnotations.includes(message.type)) {
|
|
36
28
|
this.receivedTypesThatFireAnnotations[message.url]
|
|
37
29
|
? this.receivedTypesThatFireAnnotations[message.url]++
|
|
@@ -46,11 +38,6 @@ export default class GrafanaPlugin extends SitespeedioPlugin {
|
|
|
46
38
|
|
|
47
39
|
break;
|
|
48
40
|
}
|
|
49
|
-
case 'webpagetest.setup': {
|
|
50
|
-
this.messageTypesToFireAnnotations.push('webpagetest.pageSummary');
|
|
51
|
-
|
|
52
|
-
break;
|
|
53
|
-
}
|
|
54
41
|
case 'sitespeedio.setup': {
|
|
55
42
|
// Let other plugins know that the Grafana plugin is alive
|
|
56
43
|
queue.postMessage(this.make('grafana.setup'));
|
|
@@ -77,10 +64,7 @@ export default class GrafanaPlugin extends SitespeedioPlugin {
|
|
|
77
64
|
break;
|
|
78
65
|
}
|
|
79
66
|
default: {
|
|
80
|
-
if (message.type === '
|
|
81
|
-
// We are only interested in WebPageTest browser if we run it standalone
|
|
82
|
-
this.browser = message.data.browser;
|
|
83
|
-
} else if (message.type === 'browsertime.alias') {
|
|
67
|
+
if (message.type === 'browsertime.alias') {
|
|
84
68
|
this.alias[message.url] = message.data;
|
|
85
69
|
} else if (
|
|
86
70
|
this.receivedTypesThatFireAnnotations[message.url] ===
|
|
@@ -65,19 +65,13 @@ export function send(
|
|
|
65
65
|
tags.push(...extraTags);
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
if (webPageTestExtraData) {
|
|
69
|
-
tags.push(webPageTestExtraData.connectivity, webPageTestExtraData.location);
|
|
70
|
-
}
|
|
71
|
-
|
|
72
68
|
const tagsArray = getTagsAsArray(tags);
|
|
73
69
|
|
|
74
70
|
const message = getAnnotationMessage(
|
|
75
71
|
absolutePagePath,
|
|
76
72
|
screenShotsEnabledInBrowsertime,
|
|
77
73
|
screenshotType,
|
|
78
|
-
|
|
79
|
-
? webPageTestExtraData.webPageTestResultURL
|
|
80
|
-
: undefined,
|
|
74
|
+
undefined,
|
|
81
75
|
usingBrowsertime,
|
|
82
76
|
options
|
|
83
77
|
);
|
|
@@ -27,13 +27,6 @@ function keyPathFromMessage(message, options, includeQueryParameters, alias) {
|
|
|
27
27
|
|
|
28
28
|
typeParts.splice(1, 0, connectivity);
|
|
29
29
|
typeParts.splice(1, 0, options.browser);
|
|
30
|
-
} else if (/(^webpagetest)/.test(message.type)) {
|
|
31
|
-
if (message.connectivity) {
|
|
32
|
-
typeParts.splice(2, 0, message.connectivity);
|
|
33
|
-
}
|
|
34
|
-
if (message.location) {
|
|
35
|
-
typeParts.splice(2, 0, toSafeKey(message.location));
|
|
36
|
-
}
|
|
37
30
|
} else if (/(^gpsi)/.test(message.type)) {
|
|
38
31
|
typeParts.splice(2, 0, options.mobile ? 'mobile' : 'desktop');
|
|
39
32
|
}
|
|
@@ -7,7 +7,6 @@ import { SitespeedioPlugin } from '@sitespeed.io/plugin';
|
|
|
7
7
|
|
|
8
8
|
import { send } from './send-annotation.js';
|
|
9
9
|
import { GraphiteDataGenerator as DataGenerator } from './data-generator.js';
|
|
10
|
-
import { toSafeKey } from '../../support/tsdbUtil.js';
|
|
11
10
|
import { isStatsD } from './helpers/is-statsd.js';
|
|
12
11
|
import { throwIfMissing } from '../../support/util.js';
|
|
13
12
|
import { toArray } from '../../support/util.js';
|
|
@@ -67,7 +66,7 @@ export default class GraphitePlugin extends SitespeedioPlugin {
|
|
|
67
66
|
}
|
|
68
67
|
|
|
69
68
|
processMessage(message, queue) {
|
|
70
|
-
// First catch if we are running Browsertime
|
|
69
|
+
// First catch if we are running Browsertime
|
|
71
70
|
switch (message.type) {
|
|
72
71
|
case 'browsertime.setup': {
|
|
73
72
|
this.messageTypesToFireAnnotations.push('browsertime.pageSummary');
|
|
@@ -75,11 +74,6 @@ export default class GraphitePlugin extends SitespeedioPlugin {
|
|
|
75
74
|
|
|
76
75
|
break;
|
|
77
76
|
}
|
|
78
|
-
case 'webpagetest.setup': {
|
|
79
|
-
this.messageTypesToFireAnnotations.push('webpagetest.pageSummary');
|
|
80
|
-
|
|
81
|
-
break;
|
|
82
|
-
}
|
|
83
77
|
case 'browsertime.config': {
|
|
84
78
|
if (message.data.screenshot) {
|
|
85
79
|
this.useScreenshots = message.data.screenshot;
|
|
@@ -104,12 +98,6 @@ export default class GraphitePlugin extends SitespeedioPlugin {
|
|
|
104
98
|
|
|
105
99
|
break;
|
|
106
100
|
}
|
|
107
|
-
default: {
|
|
108
|
-
if (message.type === 'webpagetest.browser' && !this.usingBrowsertime) {
|
|
109
|
-
// We are only interested in WebPageTest browser if we run it standalone
|
|
110
|
-
this.browser = message.data.browser;
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
101
|
}
|
|
114
102
|
|
|
115
103
|
if (message.type === 'browsertime.alias') {
|
|
@@ -129,14 +117,6 @@ export default class GraphitePlugin extends SitespeedioPlugin {
|
|
|
129
117
|
: (this.receivedTypesThatFireAnnotations[message.url] = 1);
|
|
130
118
|
}
|
|
131
119
|
|
|
132
|
-
if (message.type === 'webpagetest.pageSummary') {
|
|
133
|
-
this.wptExtras[message.url] = {};
|
|
134
|
-
this.wptExtras[message.url].webPageTestResultURL =
|
|
135
|
-
message.data.data.summary;
|
|
136
|
-
this.wptExtras[message.url].connectivity = message.connectivity;
|
|
137
|
-
this.wptExtras[message.url].location = toSafeKey(message.location);
|
|
138
|
-
}
|
|
139
|
-
|
|
140
120
|
// we only sends individual groups to Graphite, not the
|
|
141
121
|
// total of all groups (you can calculate that yourself)
|
|
142
122
|
if (message.group === 'total') {
|
|
@@ -175,8 +155,7 @@ export default class GraphitePlugin extends SitespeedioPlugin {
|
|
|
175
155
|
this.messageTypesToFireAnnotations.length &&
|
|
176
156
|
this.resultUrls.hasBaseUrl() &&
|
|
177
157
|
this.sendAnnotation &&
|
|
178
|
-
|
|
179
|
-
message.type === 'webpagetest.pageSummary')
|
|
158
|
+
message.type === 'browsertime.pageSummary'
|
|
180
159
|
) {
|
|
181
160
|
this.receivedTypesThatFireAnnotations[message.url] = 0;
|
|
182
161
|
const absolutePagePath = this.resultUrls.absoluteSummaryPagePath(
|
|
@@ -59,9 +59,6 @@ export function send(
|
|
|
59
59
|
if (extraTags.length > 0) {
|
|
60
60
|
tags.push(...extraTags);
|
|
61
61
|
}
|
|
62
|
-
if (webPageTestExtraData) {
|
|
63
|
-
tags.push(webPageTestExtraData.connectivity, webPageTestExtraData.location);
|
|
64
|
-
}
|
|
65
62
|
const theTags = options.graphite.arrayTags
|
|
66
63
|
? getTagsAsArray(tags)
|
|
67
64
|
: getTagsAsString(tags);
|
|
@@ -70,9 +67,7 @@ export function send(
|
|
|
70
67
|
absolutePagePath,
|
|
71
68
|
screenShotsEnabledInBrowsertime,
|
|
72
69
|
screenshotType,
|
|
73
|
-
|
|
74
|
-
? webPageTestExtraData.webPageTestResultURL
|
|
75
|
-
: undefined,
|
|
70
|
+
undefined,
|
|
76
71
|
usingBrowsertime,
|
|
77
72
|
options
|
|
78
73
|
);
|
|
@@ -20,8 +20,7 @@ export default class HarstorerPlugin extends SitespeedioPlugin {
|
|
|
20
20
|
this.alias[message.url] = message.data;
|
|
21
21
|
break;
|
|
22
22
|
}
|
|
23
|
-
case 'browsertime.har':
|
|
24
|
-
case 'webpagetest.har': {
|
|
23
|
+
case 'browsertime.har': {
|
|
25
24
|
const json = JSON.stringify(message.data);
|
|
26
25
|
|
|
27
26
|
return this.gzipHAR
|
|
@@ -42,13 +42,6 @@ export default {
|
|
|
42
42
|
'transferSize.image',
|
|
43
43
|
'thirdParty.transferSize',
|
|
44
44
|
'thirdParty.requests',
|
|
45
|
-
'webpagetest.SpeedIndex',
|
|
46
|
-
'webpagetest.lastVisualChange',
|
|
47
|
-
'webpagetest.render',
|
|
48
|
-
'webpagetest.visualComplete',
|
|
49
|
-
'webpagetest.visualComplete95',
|
|
50
|
-
'webpagetest.TTFB',
|
|
51
|
-
'webpagetest.fullyLoaded',
|
|
52
45
|
'axe.critical',
|
|
53
46
|
'axe.serious',
|
|
54
47
|
'axe.minor',
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { join } from 'node:path';
|
|
2
2
|
import osName from 'os-name';
|
|
3
3
|
import { promisify } from 'node:util';
|
|
4
|
-
import { platform } from 'node:os';
|
|
4
|
+
import { platform, hostname } from 'node:os';
|
|
5
5
|
import { createRequire } from 'node:module';
|
|
6
6
|
import { fileURLToPath } from 'node:url';
|
|
7
7
|
|
|
@@ -198,7 +198,6 @@ export class HTMLBuilder {
|
|
|
198
198
|
let ios;
|
|
199
199
|
let connectivity;
|
|
200
200
|
let usingBrowsertime;
|
|
201
|
-
let usingWebPageTest;
|
|
202
201
|
let cpuBenchmark;
|
|
203
202
|
let windowSize;
|
|
204
203
|
const urlPageRenders = [];
|
|
@@ -215,7 +214,6 @@ export class HTMLBuilder {
|
|
|
215
214
|
pageNumber++;
|
|
216
215
|
// In the future we can fix so we just pickup the setup messages
|
|
217
216
|
usingBrowsertime = pageInfo.data.browsertime;
|
|
218
|
-
usingWebPageTest = pageInfo.data.webpagetest;
|
|
219
217
|
// if we don't use Browsertime, we don't get the browser version
|
|
220
218
|
browser = usingBrowsertime
|
|
221
219
|
? {
|
|
@@ -289,7 +287,6 @@ export class HTMLBuilder {
|
|
|
289
287
|
options
|
|
290
288
|
)
|
|
291
289
|
: [];
|
|
292
|
-
|
|
293
290
|
let rootPath = this.storageManager.rootPathFromUrl(url, daurlAlias);
|
|
294
291
|
let data = {
|
|
295
292
|
daurl: url,
|
|
@@ -315,6 +312,7 @@ export class HTMLBuilder {
|
|
|
315
312
|
rootPath,
|
|
316
313
|
resultUrls: this.context.resultUrls,
|
|
317
314
|
assetsPath: assetsBaseURL || rootPath,
|
|
315
|
+
sitespeedioURL: options.html.homeurl,
|
|
318
316
|
menu: 'pages',
|
|
319
317
|
pageTitle: `Summary for ${helpers.plural(
|
|
320
318
|
this.options.browsertime.iterations,
|
|
@@ -387,6 +385,7 @@ export class HTMLBuilder {
|
|
|
387
385
|
rootPath,
|
|
388
386
|
resultUrls: this.context.resultUrls,
|
|
389
387
|
assetsPath: assetsBaseURL || rootPath,
|
|
388
|
+
sitespeedioURL: options.html.homeurl,
|
|
390
389
|
menu: 'pages',
|
|
391
390
|
pageTitle: `Run ${
|
|
392
391
|
Number.parseInt(runIndex) + 1
|
|
@@ -452,10 +451,12 @@ export class HTMLBuilder {
|
|
|
452
451
|
h: helpers,
|
|
453
452
|
rootPath: '',
|
|
454
453
|
assetsPath: assetsBaseURL || '',
|
|
454
|
+
sitespeedioURL: options.html.homeurl,
|
|
455
455
|
menu: name,
|
|
456
456
|
pageTitle: name,
|
|
457
457
|
pageDescription: '',
|
|
458
458
|
browser,
|
|
459
|
+
hostname: hostname(),
|
|
459
460
|
cpuBenchmark,
|
|
460
461
|
windowSize,
|
|
461
462
|
os: osInfo,
|
|
@@ -463,7 +464,7 @@ export class HTMLBuilder {
|
|
|
463
464
|
android,
|
|
464
465
|
ios,
|
|
465
466
|
usingBrowsertime,
|
|
466
|
-
usingWebPageTest,
|
|
467
|
+
usingWebPageTest: false,
|
|
467
468
|
headers: this.summary,
|
|
468
469
|
version: version,
|
|
469
470
|
browsertimeVersion: dependencies.browsertime,
|
|
@@ -34,8 +34,6 @@ export default class HTMLPlugin extends SitespeedioPlugin {
|
|
|
34
34
|
'pagexray.pageSummary',
|
|
35
35
|
'coach.run',
|
|
36
36
|
'coach.pageSummary',
|
|
37
|
-
'webpagetest.run',
|
|
38
|
-
'webpagetest.pageSummary',
|
|
39
37
|
'thirdparty.run',
|
|
40
38
|
'thirdparty.pageSummary',
|
|
41
39
|
'crux.pageSummary'
|
|
@@ -70,7 +68,6 @@ export default class HTMLPlugin extends SitespeedioPlugin {
|
|
|
70
68
|
break;
|
|
71
69
|
}
|
|
72
70
|
// we always want to add data from our HARs
|
|
73
|
-
case 'webpagetest.har':
|
|
74
71
|
case 'browsertime.har': {
|
|
75
72
|
dataCollector.addDataForUrl(
|
|
76
73
|
message.url,
|
|
@@ -204,7 +201,6 @@ export default class HTMLPlugin extends SitespeedioPlugin {
|
|
|
204
201
|
}
|
|
205
202
|
break;
|
|
206
203
|
}
|
|
207
|
-
case 'webpagetest.summary':
|
|
208
204
|
case 'coach.summary':
|
|
209
205
|
case 'pagexray.summary':
|
|
210
206
|
case 'browsertime.summary':
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { noop, size, time } from '../../../support/helpers/index.js';
|
|
2
|
-
import get from 'lodash.get';
|
|
3
2
|
|
|
4
3
|
function row(stat, name, metricName, formatter) {
|
|
5
4
|
if (stat === undefined) {
|
|
@@ -23,7 +22,6 @@ export default function (data) {
|
|
|
23
22
|
const coach = data.coach;
|
|
24
23
|
const pagexray = data.pagexray;
|
|
25
24
|
const browsertime = data.browsertime;
|
|
26
|
-
const webpagetest = data.webpagetest;
|
|
27
25
|
const axe = data.axe;
|
|
28
26
|
const sustainable = data.sustainable;
|
|
29
27
|
|
|
@@ -309,27 +307,6 @@ export default function (data) {
|
|
|
309
307
|
}
|
|
310
308
|
}
|
|
311
309
|
|
|
312
|
-
if (webpagetest) {
|
|
313
|
-
const firstView = get(webpagetest, 'summary.timing.firstView');
|
|
314
|
-
if (firstView) {
|
|
315
|
-
rows.push(
|
|
316
|
-
row(firstView.render, 'WPT render (firstView)', 'render', time.ms),
|
|
317
|
-
row(
|
|
318
|
-
firstView.SpeedIndex,
|
|
319
|
-
'WPT SpeedIndex (firstView)',
|
|
320
|
-
'SpeedIndex',
|
|
321
|
-
time.ms
|
|
322
|
-
),
|
|
323
|
-
row(
|
|
324
|
-
firstView.fullyLoaded,
|
|
325
|
-
'WPT Fully loaded (firstView)',
|
|
326
|
-
'fullyLoaded',
|
|
327
|
-
time.ms
|
|
328
|
-
)
|
|
329
|
-
);
|
|
330
|
-
}
|
|
331
|
-
}
|
|
332
|
-
|
|
333
310
|
if (axe) {
|
|
334
311
|
rows.push(
|
|
335
312
|
row(
|
|
@@ -7,7 +7,7 @@ mixin headerLink(id, name)
|
|
|
7
7
|
.darkblue.nav
|
|
8
8
|
.navgrid
|
|
9
9
|
.logo
|
|
10
|
-
a(href=
|
|
10
|
+
a(href=sitespeedioURL)
|
|
11
11
|
img.navbar-brand(src= assetsPath + 'img/sitespeed.io-logo.png', width='162', height='50', alt='sitespeed.io logo')
|
|
12
12
|
ul
|
|
13
13
|
+headerLink('index', 'Summary')
|
|
@@ -12,6 +12,3 @@ if usingBrowsertime
|
|
|
12
12
|
|
|
13
13
|
if options.browsertime.browser === 'safari'
|
|
14
14
|
p At the moment we get limited metrics from Safari. Transfer sizes and number of requests are missing.
|
|
15
|
-
|
|
16
|
-
else if usingWebPageTest
|
|
17
|
-
p.small Tested #{timestamp} using WebPageTest #{options.webpagetest.location} using connectivity #{options.webpagetest.connectivity} for #{h.plural(options.webpagetest.runs, 'run')}.
|
|
@@ -7,6 +7,3 @@ if pageInfo.data.browsertime
|
|
|
7
7
|
else if options.multi
|
|
8
8
|
| .
|
|
9
9
|
a(href= rootPath + 'settings.html')= '(runtime settings).'
|
|
10
|
-
|
|
11
|
-
else if pageInfo.data.webpagetest
|
|
12
|
-
p.small Tested #{timestamp} using WebPageTest #{options.webpagetest.location} using connectivity #{options.webpagetest.connectivity} for #{h.plural(options.webpagetest.runs, 'run')}.
|
|
@@ -175,31 +175,9 @@ block content
|
|
|
175
175
|
tr
|
|
176
176
|
td Last Visual Change
|
|
177
177
|
td #{h.time.ms(lastVisualChange)}
|
|
178
|
-
if !d.browsertime && d.webpagetest
|
|
179
|
-
tr
|
|
180
|
-
th(colspan='2') WebPageTest
|
|
181
|
-
tr
|
|
182
|
-
td Render (first view)
|
|
183
|
-
td #{d.webpagetest.run.firstView.render}
|
|
184
|
-
tr
|
|
185
|
-
td Speed Index (first view)
|
|
186
|
-
td #{d.webpagetest.run.firstView.SpeedIndex}
|
|
187
|
-
tr
|
|
188
|
-
td Visual Complete 85% (first view)
|
|
189
|
-
td #{d.webpagetest.run.firstView.visualComplete85}
|
|
190
|
-
tr
|
|
191
|
-
td Last Visual Change (first view)
|
|
192
|
-
td #{d.webpagetest.run.firstView.lastVisualChange}
|
|
193
|
-
tr
|
|
194
|
-
td Requests
|
|
195
|
-
td #{d.webpagetest.run.firstView.requestsFull}
|
|
196
178
|
|
|
197
179
|
.one-half.column
|
|
198
|
-
if
|
|
199
|
-
- screenshotName = 'data/screenshots/wpt-' + iteration + '-firstView.png'
|
|
200
|
-
a(href=screenshotName)
|
|
201
|
-
img.screenshot(src=screenshotName, alt='Screenshot')
|
|
202
|
-
else if hasScreenShots
|
|
180
|
+
if hasScreenShots
|
|
203
181
|
- screenshotName = 'data/screenshots/' + iteration + '/afterPageCompleteCheck.' + screenShotType
|
|
204
182
|
- const width = options.mobile ? 150 : '100%';
|
|
205
183
|
a(href=screenshotName)
|