Compare commits

..

259 Commits

Author SHA1 Message Date
Amir Raminfar f88e77215c Release 3.2.2 2021-01-21 13:56:33 -08:00
Amir Raminfar 7f6a6a03c0 Fixes possible goroutine leak 2021-01-21 10:50:09 -08:00
dependabot-preview[bot] 21561b40b0 Merge pull request #948 from amir20/dependabot/npm_and_yarn/sass-1.32.5 2021-01-21 12:22:02 +00:00
dependabot-preview[bot] 2145f66237 Bump sass from 1.32.4 to 1.32.5
Bumps [sass](https://github.com/sass/dart-sass) from 1.32.4 to 1.32.5.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.32.4...1.32.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 12:16:48 +00:00
dependabot-preview[bot] ba2b381964 Merge pull request #950 from amir20/dependabot/npm_and_yarn/postcss-loader-4.2.0 2021-01-21 12:14:52 +00:00
dependabot-preview[bot] 30faba9e1d Bump postcss-loader from 4.1.0 to 4.2.0
Bumps [postcss-loader](https://github.com/webpack-contrib/postcss-loader) from 4.1.0 to 4.2.0.
- [Release notes](https://github.com/webpack-contrib/postcss-loader/releases)
- [Changelog](https://github.com/webpack-contrib/postcss-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/postcss-loader/compare/v4.1.0...v4.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 12:09:42 +00:00
dependabot-preview[bot] f4152df06f Merge pull request #947 from amir20/dependabot/npm_and_yarn/webpack-5.16.0 2021-01-21 09:10:50 +00:00
dependabot-preview[bot] 2dde844318 Bump webpack from 5.15.0 to 5.16.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.15.0 to 5.16.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.15.0...v5.16.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 09:05:32 +00:00
dependabot-preview[bot] 59b3447854 Merge pull request #949 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001179 2021-01-21 09:03:37 +00:00
dependabot-preview[bot] 241fb8f1b3 Bump caniuse-lite from 1.0.30001178 to 1.0.30001179
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001178 to 1.0.30001179.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001178...v1.0.30001179)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-21 08:58:35 +00:00
Amir Raminfar 1747efbd12 Removes built with 2021-01-20 16:40:42 -08:00
Amir Raminfar 289d3845a8 Only enables pprof when debugging is enabled 2021-01-20 15:54:14 -08:00
Amir Raminfar 5f0c384b86 rebases master 2021-01-20 15:39:51 -08:00
Amir Raminfar f306da7ef8 Adds pprof 2021-01-20 15:39:51 -08:00
Amir Raminfar 928884815b Tidy up mod 2021-01-20 15:39:38 -08:00
dependabot-preview[bot] 95dd9ae6f9 Merge pull request #946 from amir20/dependabot/npm_and_yarn/autoprefixer-10.2.3 2021-01-19 19:39:17 +00:00
dependabot-preview[bot] 88167d10bf Bump autoprefixer from 10.2.1 to 10.2.3
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.2.1 to 10.2.3.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.2.1...10.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-19 19:33:55 +00:00
dependabot-preview[bot] cf8f07fa41 Merge pull request #945 from amir20/dependabot/npm_and_yarn/hotkeys-js-3.8.2 2021-01-19 13:32:39 +00:00
dependabot-preview[bot] acfe74ce95 Bump hotkeys-js from 3.8.1 to 3.8.2
Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys) from 3.8.1 to 3.8.2.
- [Release notes](https://github.com/jaywcjlove/hotkeys/releases)
- [Commits](https://github.com/jaywcjlove/hotkeys/commits/v3.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-19 13:29:07 +00:00
dependabot-preview[bot] 015fb38b46 Merge pull request #944 from amir20/dependabot/npm_and_yarn/webpack-cli-4.4.0 2021-01-19 11:37:15 +00:00
dependabot-preview[bot] ce7d734672 Bump webpack-cli from 4.3.1 to 4.4.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.3.1 to 4.4.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.1...webpack-cli@4.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-19 11:32:19 +00:00
dependabot-preview[bot] 98b88c2857 Merge pull request #943 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001178 2021-01-17 06:42:05 +00:00
dependabot-preview[bot] 3c0a56e709 Bump caniuse-lite from 1.0.30001177 to 1.0.30001178
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001177 to 1.0.30001178.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001177...v1.0.30001178)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-17 06:37:25 +00:00
dependabot-preview[bot] f4be8d327d Merge pull request #942 from amir20/dependabot/npm_and_yarn/webpack-5.15.0 2021-01-15 17:19:55 +00:00
dependabot-preview[bot] 0979916707 Bump webpack from 5.14.0 to 5.15.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.14.0 to 5.15.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.14.0...v5.15.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-15 17:13:49 +00:00
dependabot-preview[bot] 038351c373 Merge pull request #941 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001177 2021-01-14 09:03:17 +00:00
dependabot-preview[bot] 0004844ace Bump caniuse-lite from 1.0.30001176 to 1.0.30001177
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001176 to 1.0.30001177.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001176...v1.0.30001177)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-14 08:58:21 +00:00
dependabot-preview[bot] 8e0cdfcf20 Merge pull request #940 from amir20/dependabot/npm_and_yarn/webpack-5.14.0 2021-01-14 00:04:56 +00:00
dependabot-preview[bot] 4eefe46a93 Bump webpack from 5.13.0 to 5.14.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.13.0 to 5.14.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.13.0...v5.14.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 23:58:58 +00:00
dependabot-preview[bot] 3332b4183c Merge pull request #939 from amir20/dependabot/npm_and_yarn/webpack-dev-server-3.11.2 2021-01-13 15:43:37 +00:00
dependabot-preview[bot] 0213333722 Bump webpack-dev-server from 3.11.1 to 3.11.2
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.11.1 to 3.11.2.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.2/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.1...v3.11.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 15:37:40 +00:00
dependabot-preview[bot] a4fa1b784b Merge pull request #938 from amir20/dependabot/npm_and_yarn/mini-css-extract-plugin-1.3.4 2021-01-13 15:10:48 +00:00
dependabot-preview[bot] 4f62a01a33 Bump mini-css-extract-plugin from 1.3.3 to 1.3.4
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.3.3 to 1.3.4.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.3.3...v1.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 15:04:57 +00:00
dependabot-preview[bot] a6f63662e4 Merge pull request #937 from amir20/dependabot/go_modules/github.com/stretchr/testify-1.7.0 2021-01-13 13:32:16 +00:00
dependabot-preview[bot] 436998faf3 Bump github.com/stretchr/testify from 1.6.1 to 1.7.0
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.6.1 to 1.7.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.6.1...v1.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 13:27:31 +00:00
dependabot-preview[bot] 5d18ed435a Merge pull request #936 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001176 2021-01-13 08:08:37 +00:00
dependabot-preview[bot] decbccf7fa Bump caniuse-lite from 1.0.30001174 to 1.0.30001176
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001174 to 1.0.30001176.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001174...v1.0.30001176)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-13 08:03:12 +00:00
dependabot-preview[bot] 79d9a2db83 Merge pull request #935 from amir20/dependabot/npm_and_yarn/sass-1.32.4 2021-01-12 02:12:58 +00:00
dependabot-preview[bot] 3792ac517a Bump sass from 1.32.3 to 1.32.4
Bumps [sass](https://github.com/sass/dart-sass) from 1.32.3 to 1.32.4.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.32.3...1.32.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-12 02:07:49 +00:00
dependabot-preview[bot] aef3d37342 Merge pull request #934 from amir20/dependabot/npm_and_yarn/sass-1.32.3 2021-01-12 00:39:55 +00:00
dependabot-preview[bot] c71f2f6618 Bump sass from 1.32.2 to 1.32.3
Bumps [sass](https://github.com/sass/dart-sass) from 1.32.2 to 1.32.3.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.32.2...1.32.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-12 00:34:24 +00:00
dependabot-preview[bot] a6e4a67cfe Merge pull request #933 from amir20/dependabot/npm_and_yarn/webpack-5.13.0 2021-01-11 22:41:30 +00:00
dependabot-preview[bot] a72ff78050 Bump webpack from 5.12.3 to 5.13.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.12.3 to 5.13.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.12.3...v5.13.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-11 22:36:07 +00:00
dependabot-preview[bot] b26d281135 Merge pull request #932 from amir20/dependabot/npm_and_yarn/sass-loader-10.1.1 2021-01-11 14:29:51 +00:00
dependabot-preview[bot] fca3672a74 Bump sass-loader from 10.1.0 to 10.1.1
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.1.0 to 10.1.1.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.1.0...v10.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-11 14:27:37 +00:00
dependabot-preview[bot] df8bc2694c Merge pull request #931 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001174 2021-01-10 21:52:10 +00:00
dependabot-preview[bot] 069eee0db1 Bump caniuse-lite from 1.0.30001173 to 1.0.30001174
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001173 to 1.0.30001174.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001173...v1.0.30001174)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-10 21:46:10 +00:00
dependabot-preview[bot] 87c0aaab19 Merge pull request #930 from amir20/dependabot/npm_and_yarn/webpack-5.12.3 2021-01-10 18:59:28 +00:00
dependabot-preview[bot] b594ebdea4 Bump webpack from 5.12.2 to 5.12.3
Bumps [webpack](https://github.com/webpack/webpack) from 5.12.2 to 5.12.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.12.2...v5.12.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-10 18:53:33 +00:00
dependabot-preview[bot] 113adc0ac3 Merge pull request #929 from amir20/dependabot/npm_and_yarn/postcss-8.2.4 2021-01-09 10:37:24 +00:00
dependabot-preview[bot] 8893643841 Bump postcss from 8.2.3 to 8.2.4
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.3 to 8.2.4.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.3...8.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-09 10:32:42 +00:00
dependabot-preview[bot] fd141d0deb Merge pull request #928 from amir20/dependabot/npm_and_yarn/webpack-5.12.2 2021-01-09 08:45:31 +00:00
dependabot-preview[bot] c52a3f65f4 Bump webpack from 5.12.1 to 5.12.2
Bumps [webpack](https://github.com/webpack/webpack) from 5.12.1 to 5.12.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.12.1...v5.12.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-09 08:39:52 +00:00
dependabot-preview[bot] 7349f8ff20 Merge pull request #927 from amir20/dependabot/npm_and_yarn/webpack-5.12.1 2021-01-08 16:01:00 +00:00
dependabot-preview[bot] 47e11e9627 Bump webpack from 5.12.0 to 5.12.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.12.0 to 5.12.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.12.0...v5.12.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 15:55:29 +00:00
dependabot-preview[bot] c9abae77cc Merge pull request #926 from amir20/dependabot/npm_and_yarn/webpack-5.12.0 2021-01-08 13:10:39 +00:00
dependabot-preview[bot] 17024fb3f5 Bump webpack from 5.11.1 to 5.12.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.11.1 to 5.12.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.11.1...v5.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 13:05:19 +00:00
dependabot-preview[bot] 5d2f505ba1 Merge pull request #925 from amir20/dependabot/npm_and_yarn/autoprefixer-10.2.1 2021-01-08 01:52:27 +00:00
dependabot-preview[bot] 1065367be8 Bump autoprefixer from 10.2.0 to 10.2.1
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.2.0 to 10.2.1.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.2.0...10.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-08 01:46:54 +00:00
dependabot-preview[bot] 2d4257b557 Merge pull request #924 from amir20/dependabot/npm_and_yarn/postcss-8.2.3 2021-01-07 12:16:19 +00:00
dependabot-preview[bot] 1a8babde4c Bump postcss from 8.2.2 to 8.2.3
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.2 to 8.2.3.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.2...8.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-07 12:10:57 +00:00
dependabot-preview[bot] 7f0e452405 Merge pull request #923 from amir20/dependabot/npm_and_yarn/sass-1.32.2 2021-01-07 00:13:24 +00:00
dependabot-preview[bot] 12c045f36c Bump sass from 1.32.1 to 1.32.2
Bumps [sass](https://github.com/sass/dart-sass) from 1.32.1 to 1.32.2.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.32.1...1.32.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-07 00:08:09 +00:00
dependabot-preview[bot] a08e2e138a Merge pull request #922 from amir20/dependabot/npm_and_yarn/sass-1.32.1 2021-01-06 21:54:35 +00:00
dependabot-preview[bot] 902f3de319 Bump sass from 1.32.0 to 1.32.1
Bumps [sass](https://github.com/sass/dart-sass) from 1.32.0 to 1.32.1.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.32.0...1.32.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-06 21:48:58 +00:00
Amir Raminfar 398db90f2a Release 3.2.1 2021-01-06 11:00:09 -08:00
dependabot-preview[bot] d8b9019114 Merge pull request #921 from amir20/dependabot/npm_and_yarn/autoprefixer-10.2.0 2021-01-06 02:32:45 +00:00
dependabot-preview[bot] 6027012548 Bump autoprefixer from 10.1.0 to 10.2.0
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.1.0 to 10.2.0.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.1.0...10.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-06 02:27:13 +00:00
Amir Raminfar 4d4d8f549f Adds html5 download and changes mimetype 2021-01-05 16:59:51 -08:00
Amir Raminfar 72fabbb3fa Cleans up go.mod 2021-01-05 13:53:49 -08:00
dependabot-preview[bot] fba244144c Merge pull request #919 from amir20/dependabot/go_modules/github.com/docker/docker-20.10.2incompatible 2021-01-05 13:27:02 +00:00
dependabot-preview[bot] c5c04ed9b5 Bump github.com/docker/docker
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 20.10.1+incompatible to 20.10.2+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Changelog](https://github.com/moby/moby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/docker/docker/compare/v20.10.1...v20.10.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-05 13:21:39 +00:00
Amir Raminfar 7e2e75fcd2 Cleans up go code 2021-01-04 20:07:28 -08:00
Amir Raminfar 89144ff61f Release 3.2.0 2021-01-04 11:26:21 -08:00
dependabot-preview[bot] b66e959abf Merge pull request #918 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001173 2021-01-04 09:27:52 +00:00
dependabot-preview[bot] 1164909c8f Bump caniuse-lite from 1.0.30001171 to 1.0.30001173
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001171 to 1.0.30001173.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001171...v1.0.30001173)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-04 09:22:51 +00:00
Amir Raminfar 30fcf42bd7 Reverts subtractions 2021-01-03 17:31:46 -08:00
Amir Raminfar 911a4843c6 Subtracts 2 minutes from begenning of container 2021-01-03 17:24:55 -08:00
Amir Raminfar 5ba3d8df2f Fixes version test 2021-01-03 14:39:22 -08:00
Amir Raminfar c362ef24fc Updates version route 2021-01-03 14:30:58 -08:00
Amir Raminfar ac008519bc Add new functionality to download logs (#917) 2021-01-03 14:27:17 -08:00
Amir Raminfar b87b0d018f Fixes error handeling for streaming 2021-01-03 13:44:36 -08:00
dependabot-preview[bot] 6dbbd78801 Merge pull request #916 from amir20/dependabot/npm_and_yarn/html-webpack-plugin-4.5.1 2021-01-03 17:46:42 +00:00
dependabot-preview[bot] ebd9db4d00 Bump html-webpack-plugin from 4.5.0 to 4.5.1
Bumps [html-webpack-plugin](https://github.com/jantimon/html-webpack-plugin) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/jantimon/html-webpack-plugin/releases)
- [Changelog](https://github.com/jantimon/html-webpack-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jantimon/html-webpack-plugin/compare/v4.5.0...v4.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2021-01-03 17:41:50 +00:00
Amir Raminfar de15fcd74f Tries to user readers instead of channels (#915) 2021-01-02 19:25:52 -08:00
Amir Raminfar 246f06e1a5 Fixes formatting 2021-01-01 14:58:22 -08:00
Amir Raminfar da2401bb89 Adds is-hidden-mobile for header 2021-01-01 14:50:47 -08:00
dependabot-preview[bot] 8d7f897e19 Merge pull request #913 from amir20/dependabot/npm_and_yarn/webpack-cli-4.3.1 2020-12-31 17:48:43 +00:00
dependabot-preview[bot] 76b506ad25 Bump webpack-cli from 4.3.0 to 4.3.1
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.3.0 to 4.3.1.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.3.0...webpack-cli@4.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-31 17:43:38 +00:00
dependabot-preview[bot] 5e21179d2e Merge pull request #912 from amir20/dependabot/npm_and_yarn/sass-1.32.0 2020-12-30 00:32:10 +00:00
dependabot-preview[bot] 619f23517c Bump sass from 1.30.0 to 1.32.0
Bumps [sass](https://github.com/sass/dart-sass) from 1.30.0 to 1.32.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.30.0...1.32.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-30 00:26:08 +00:00
dependabot-preview[bot] 0a40077c9a Merge pull request #911 from amir20/dependabot/npm_and_yarn/postcss-8.2.2 2020-12-29 21:06:08 +00:00
dependabot-preview[bot] cf0b4a5896 Bump postcss from 8.2.1 to 8.2.2
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.1 to 8.2.2.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.1...8.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-29 21:01:01 +00:00
dependabot-preview[bot] 22c2003794 Merge pull request #910 from amir20/dependabot/npm_and_yarn/webpack-dev-server-3.11.1 2020-12-29 13:47:45 +00:00
dependabot-preview[bot] e05425e161 Bump webpack-dev-server from 3.11.0 to 3.11.1
Bumps [webpack-dev-server](https://github.com/webpack/webpack-dev-server) from 3.11.0 to 3.11.1.
- [Release notes](https://github.com/webpack/webpack-dev-server/releases)
- [Changelog](https://github.com/webpack/webpack-dev-server/blob/v3.11.1/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-dev-server/compare/v3.11.0...v3.11.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-29 13:42:37 +00:00
dependabot-preview[bot] 65e2000876 Merge pull request #909 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001171 2020-12-29 00:42:27 +00:00
dependabot-preview[bot] 138c5fd957 Bump caniuse-lite from 1.0.30001170 to 1.0.30001171
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001170 to 1.0.30001171.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001170...v1.0.30001171)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-29 00:37:08 +00:00
dependabot-preview[bot] 5144cafa97 Merge pull request #908 from amir20/dependabot/npm_and_yarn/webpack-5.11.1 2020-12-28 18:44:09 +00:00
dependabot-preview[bot] f7d4f41de4 Bump webpack from 5.11.0 to 5.11.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.11.0 to 5.11.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.11.0...v5.11.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-28 18:38:34 +00:00
dependabot-preview[bot] 8ff8ce109b Merge pull request #907 from amir20/dependabot/npm_and_yarn/webpack-cli-4.3.0 2020-12-25 18:10:29 +00:00
dependabot-preview[bot] 6a0a3eb0fa Bump webpack-cli from 4.2.0 to 4.3.0
Bumps [webpack-cli](https://github.com/webpack/webpack-cli) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/webpack/webpack-cli/releases)
- [Changelog](https://github.com/webpack/webpack-cli/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack/webpack-cli/compare/webpack-cli@4.2.0...webpack-cli@4.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-25 18:05:48 +00:00
dependabot[bot] 3abdee6c2f Bump node-notifier from 8.0.0 to 8.0.1 in /integration (#906)
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1.
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2020-12-22 07:25:21 -08:00
dependabot-preview[bot] eeb9243118 Merge pull request #905 from amir20/dependabot/npm_and_yarn/node-notifier-8.0.1 2020-12-21 16:31:34 +00:00
dependabot-preview[bot] b9b4cdbcd9 [Security] Bump node-notifier from 8.0.0 to 8.0.1
Bumps [node-notifier](https://github.com/mikaelbr/node-notifier) from 8.0.0 to 8.0.1. **This update includes a security fix.**
- [Release notes](https://github.com/mikaelbr/node-notifier/releases)
- [Changelog](https://github.com/mikaelbr/node-notifier/blob/v8.0.1/CHANGELOG.md)
- [Commits](https://github.com/mikaelbr/node-notifier/compare/v8.0.0...v8.0.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-21 16:25:43 +00:00
dependabot-preview[bot] 8d9abdb929 Merge pull request #904 from amir20/dependabot/npm_and_yarn/webpack-5.11.0 2020-12-21 13:19:49 +00:00
dependabot-preview[bot] 56dddc61ee Bump webpack from 5.10.3 to 5.11.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.10.3 to 5.11.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.10.3...v5.11.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-21 13:13:10 +00:00
dependabot-preview[bot] 5acd019994 Merge pull request #903 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001170 2020-12-20 06:42:44 +00:00
dependabot-preview[bot] ed7eab4e26 Bump caniuse-lite from 1.0.30001168 to 1.0.30001170
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001168 to 1.0.30001170.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001168...v1.0.30001170)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-20 06:37:23 +00:00
dependabot-preview[bot] 1b6ee569e5 Merge pull request #902 from amir20/dependabot/npm_and_yarn/dompurify-2.2.6 2020-12-18 15:28:22 +00:00
dependabot-preview[bot] c76296ab02 Bump dompurify from 2.2.5 to 2.2.6
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.2.5 to 2.2.6.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/commits/2.2.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-18 15:22:52 +00:00
dependabot-preview[bot] dac35f658c Merge pull request #901 from amir20/dependabot/npm_and_yarn/dompurify-2.2.5 2020-12-18 15:05:43 +00:00
dependabot-preview[bot] 7139d5ff63 Bump dompurify from 2.2.4 to 2.2.5
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.2.4 to 2.2.5.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.2.4...2.2.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-18 15:00:25 +00:00
Amir Raminfar 88917f0ea2 Release 3.1.2 2020-12-17 13:03:02 -08:00
Amir Raminfar bf3843540c Updates go modules 2020-12-17 12:57:32 -08:00
Amir Raminfar c45676599f Uses real docker api golang deps 2020-12-17 12:24:22 -08:00
dependabot-preview[bot] 90cb282051 Merge pull request #899 from amir20/dependabot/npm_and_yarn/vue-loader-15.9.6 2020-12-17 08:43:19 +00:00
dependabot-preview[bot] dcff8acce1 Bump vue-loader from 15.9.5 to 15.9.6
Bumps [vue-loader](https://github.com/vuejs/vue-loader) from 15.9.5 to 15.9.6.
- [Release notes](https://github.com/vuejs/vue-loader/releases)
- [Changelog](https://github.com/vuejs/vue-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-loader/compare/v15.9.5...v15.9.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-17 08:38:26 +00:00
Amir Raminfar 290deeac9b Release 3.1.1 2020-12-16 19:09:10 -08:00
Amir Raminfar 1739a03780 Cleans up logs 2020-12-16 16:43:25 -08:00
Amir Raminfar 1a8ecd3da4 Fixes mem stats to be cleaner 2020-12-16 15:13:49 -08:00
Amir Raminfar 6182ebd2db Removes extra logging 2020-12-16 14:23:14 -08:00
Amir Raminfar f4910fff51 Starts a refactor (#898) 2020-12-16 13:28:29 -08:00
dependabot-preview[bot] 2e1ba9decf Merge pull request #897 from amir20/dependabot/npm_and_yarn/integration/jest-image-snapshot-4.3.0 2020-12-16 19:03:47 +00:00
dependabot-preview[bot] c61ae6ad53 Bump jest-image-snapshot from 4.2.0 to 4.3.0 in /integration
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/americanexpress/jest-image-snapshot/releases)
- [Changelog](https://github.com/americanexpress/jest-image-snapshot/blob/master/CHANGELOG.md)
- [Commits](https://github.com/americanexpress/jest-image-snapshot/compare/v4.2.0...v4.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-16 18:58:00 +00:00
dependabot-preview[bot] 6733f59a01 Merge pull request #896 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001168 2020-12-16 09:57:37 +00:00
dependabot-preview[bot] befcc08ee5 Bump caniuse-lite from 1.0.30001166 to 1.0.30001168
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001166 to 1.0.30001168.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001166...v1.0.30001168)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-16 09:51:55 +00:00
Amir Raminfar 418d46d6e8 Release 3.1.0 2020-12-15 15:22:36 -08:00
Amir Raminfar 7ce29eae21 Cleans up events and js layer (#895) 2020-12-15 13:13:35 -08:00
dependabot-preview[bot] adb2837bc5 Merge pull request #894 from amir20/dependabot/npm_and_yarn/webpack-5.10.3 2020-12-15 20:10:24 +00:00
dependabot-preview[bot] a627657b99 Bump webpack from 5.10.2 to 5.10.3
Bumps [webpack](https://github.com/webpack/webpack) from 5.10.2 to 5.10.3.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.10.2...v5.10.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-15 20:05:17 +00:00
dependabot-preview[bot] a7f10e059b Merge pull request #893 from amir20/dependabot/npm_and_yarn/dompurify-2.2.4 2020-12-15 17:00:38 +00:00
dependabot-preview[bot] e8d82d6284 Bump dompurify from 2.2.3 to 2.2.4
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.2.3 to 2.2.4.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.2.3...2.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-15 16:54:56 +00:00
dependabot-preview[bot] d0815c4edc Merge pull request #892 from amir20/dependabot/npm_and_yarn/webpack-5.10.2 2020-12-15 09:12:48 +00:00
dependabot-preview[bot] 7b86170cce Bump webpack from 5.10.1 to 5.10.2
Bumps [webpack](https://github.com/webpack/webpack) from 5.10.1 to 5.10.2.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.10.1...v5.10.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-15 09:07:29 +00:00
Amir Raminfar 779d28ef06 Updates tests 2020-12-14 15:27:14 -08:00
Amir Raminfar 5a7636c535 Updates events to be more efficent 2020-12-14 15:26:37 -08:00
Amir Raminfar 8fe4f6bbd4 fmt code 2020-12-14 11:52:22 -08:00
Amir Raminfar 84fb187449 Cleans up stats worker routine 2020-12-14 11:51:53 -08:00
dependabot-preview[bot] 7e02e7a407 Merge pull request #891 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001166 2020-12-14 11:48:53 +00:00
dependabot-preview[bot] b8cfddc433 Merge pull request #890 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.1.2 2020-12-14 11:44:36 +00:00
dependabot-preview[bot] 72330222df Bump caniuse-lite from 1.0.30001165 to 1.0.30001166
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001165 to 1.0.30001166.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001165...v1.0.30001166)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-14 11:43:46 +00:00
dependabot-preview[bot] 0b2b32c676 Bump @vue/test-utils from 1.1.1 to 1.1.2
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.1.1 to 1.1.2.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.1.2/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-14 11:39:04 +00:00
Amir Raminfar a470161351 Fixes go test 2020-12-12 15:40:32 -08:00
Amir Raminfar a078e007a4 Fixes build 2020-12-12 15:38:32 -08:00
Amir Raminfar a5560ceee6 Removes delayer as it was breaking with a lot of containers. Related to #875 2020-12-12 15:21:56 -08:00
Amir Raminfar 494b9b67c2 Adds new husky 2020-12-12 15:21:13 -08:00
Amir Raminfar 40110b4aa2 Adds new husky 2020-12-12 15:21:03 -08:00
dependabot-preview[bot] 8094295228 Merge pull request #889 from amir20/dependabot/npm_and_yarn/husky-5.0.6 2020-12-11 23:53:25 +00:00
dependabot-preview[bot] 5f7e8aa640 Bump husky from 5.0.5 to 5.0.6
Bumps [husky](https://github.com/typicode/husky) from 5.0.5 to 5.0.6.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v5.0.5...v5.0.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-11 23:47:02 +00:00
dependabot-preview[bot] 7f3c79455c Merge pull request #888 from amir20/dependabot/npm_and_yarn/husky-5.0.5 2020-12-11 23:45:02 +00:00
dependabot-preview[bot] 5842fff511 Bump husky from 5.0.4 to 5.0.5
Bumps [husky](https://github.com/typicode/husky) from 5.0.4 to 5.0.5.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v5.0.4...v5.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-11 23:39:20 +00:00
dependabot-preview[bot] a95c24c2ae Merge pull request #886 from amir20/dependabot/npm_and_yarn/webpack-5.10.1 2020-12-11 20:55:07 +00:00
dependabot-preview[bot] 59077c2ab0 Bump webpack from 5.10.0 to 5.10.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.10.0...v5.10.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-11 20:50:07 +00:00
Amir Raminfar c02e2a3af4 Create codeql-analysis.yml 2020-12-10 19:36:06 -08:00
dependabot-preview[bot] 972fdd9334 Merge pull request #885 from amir20/dependabot/npm_and_yarn/ini-1.3.7 2020-12-10 19:17:22 +00:00
dependabot-preview[bot] dce071dc07 [Security] Bump ini from 1.3.5 to 1.3.7
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. **This update includes a security fix.**
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 19:11:33 +00:00
dependabot-preview[bot] 84d8757733 Merge pull request #884 from amir20/dependabot/npm_and_yarn/integration/ini-1.3.7 2020-12-10 19:10:15 +00:00
dependabot-preview[bot] a872039a50 [Security] Bump ini from 1.3.5 to 1.3.7 in /integration
Bumps [ini](https://github.com/isaacs/ini) from 1.3.5 to 1.3.7. **This update includes a security fix.**
- [Release notes](https://github.com/isaacs/ini/releases)
- [Commits](https://github.com/isaacs/ini/compare/v1.3.5...v1.3.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 19:05:02 +00:00
dependabot-preview[bot] dd4b526e4b Merge pull request #883 from amir20/dependabot/npm_and_yarn/mini-css-extract-plugin-1.3.3 2020-12-10 19:03:43 +00:00
dependabot-preview[bot] df699dbf38 Bump mini-css-extract-plugin from 1.3.2 to 1.3.3
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.3.2 to 1.3.3.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.3.2...v1.3.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-10 18:57:35 +00:00
dependabot-preview[bot] 5b97f1afef Merge pull request #882 from amir20/dependabot/npm_and_yarn/babel/core-7.12.10 2020-12-09 23:13:57 +00:00
dependabot-preview[bot] a582616cbe Bump @babel/core from 7.12.9 to 7.12.10
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.12.9 to 7.12.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.12.10/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-09 23:08:32 +00:00
dependabot-preview[bot] e7de157e12 Merge pull request #881 from amir20/dependabot/npm_and_yarn/babel/plugin-transform-runtime-7.12.10 2020-12-09 23:06:35 +00:00
dependabot-preview[bot] dbb84853ba Bump @babel/plugin-transform-runtime from 7.12.1 to 7.12.10
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-plugin-transform-runtime) from 7.12.1 to 7.12.10.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.12.10/packages/babel-plugin-transform-runtime)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-09 23:01:20 +00:00
dependabot-preview[bot] cd969afe95 Merge pull request #879 from amir20/dependabot/npm_and_yarn/postcss-8.2.1 2020-12-09 12:01:27 +00:00
dependabot-preview[bot] ad4ce78273 Bump postcss from 8.2.0 to 8.2.1
Bumps [postcss](https://github.com/postcss/postcss) from 8.2.0 to 8.2.1.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.2.0...8.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-09 11:56:25 +00:00
dependabot-preview[bot] bc2590b859 Merge pull request #878 from amir20/dependabot/npm_and_yarn/autoprefixer-10.1.0 2020-12-08 09:36:45 +00:00
dependabot-preview[bot] e74c9417a6 Merge pull request #877 from amir20/dependabot/npm_and_yarn/postcss-8.2.0 2020-12-08 09:32:46 +00:00
dependabot-preview[bot] 838e34e83d Bump autoprefixer from 10.0.4 to 10.1.0
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.0.4 to 10.1.0.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.0.4...10.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-08 09:31:46 +00:00
dependabot-preview[bot] caee716f61 Bump postcss from 8.1.14 to 8.2.0
Bumps [postcss](https://github.com/postcss/postcss) from 8.1.14 to 8.2.0.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.1.14...8.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-08 09:26:51 +00:00
dependabot-preview[bot] d8b1dfa0a9 Merge pull request #876 from amir20/dependabot/npm_and_yarn/dompurify-2.2.3 2020-12-07 14:25:36 +00:00
dependabot-preview[bot] c951aee5dd Bump dompurify from 2.2.2 to 2.2.3
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.2.2 to 2.2.3.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.2.2...2.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-07 14:19:51 +00:00
dependabot-preview[bot] 90caffd2cf Merge pull request #873 from amir20/dependabot/npm_and_yarn/husky-5.0.4 2020-12-06 23:48:12 +00:00
dependabot-preview[bot] 9bc8b19bc5 Bump husky from 4.3.4 to 5.0.4
Bumps [husky](https://github.com/typicode/husky) from 4.3.4 to 5.0.4.
- [Release notes](https://github.com/typicode/husky/releases)
- [Commits](https://github.com/typicode/husky/compare/v4.3.4...v5.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-06 23:42:32 +00:00
Amir Raminfar 1e6a1f3713 Uses HUSKY_SKIP_INSTALL=1 for docker 2020-12-05 13:38:11 -08:00
dependabot-preview[bot] cc72990855 Merge pull request #871 from amir20/dependabot/npm_and_yarn/sass-1.30.0 2020-12-04 23:35:22 +00:00
dependabot-preview[bot] 575c256474 Bump sass from 1.29.0 to 1.30.0
Bumps [sass](https://github.com/sass/dart-sass) from 1.29.0 to 1.30.0.
- [Release notes](https://github.com/sass/dart-sass/releases)
- [Changelog](https://github.com/sass/dart-sass/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sass/dart-sass/compare/1.29.0...1.30.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 23:30:06 +00:00
dependabot-preview[bot] 25aeb45047 Merge pull request #870 from amir20/dependabot/npm_and_yarn/webpack-5.10.0 2020-12-04 19:58:02 +00:00
dependabot-preview[bot] c7dd42dde4 Bump webpack from 5.9.0 to 5.10.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.9.0 to 5.10.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.9.0...v5.10.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 19:52:10 +00:00
dependabot-preview[bot] 2645124042 Merge pull request #869 from amir20/dependabot/npm_and_yarn/lint-staged-10.5.3 2020-12-04 15:50:28 +00:00
dependabot-preview[bot] 562303bd03 Bump lint-staged from 10.5.2 to 10.5.3
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.5.2 to 10.5.3.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.5.2...v10.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 15:44:57 +00:00
dependabot-preview[bot] 165939c446 Merge pull request #867 from amir20/dependabot/npm_and_yarn/mini-css-extract-plugin-1.3.2 2020-12-04 12:25:55 +00:00
dependabot-preview[bot] a76d75eb6c Bump mini-css-extract-plugin from 1.3.1 to 1.3.2
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.3.1 to 1.3.2.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.3.1...v1.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 12:20:27 +00:00
dependabot-preview[bot] 99a3bcbb4d Merge pull request #866 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001165 2020-12-04 09:00:07 +00:00
dependabot-preview[bot] 0424053104 Bump caniuse-lite from 1.0.30001164 to 1.0.30001165
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001164 to 1.0.30001165.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001164...v1.0.30001165)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 08:54:02 +00:00
dependabot-preview[bot] 404af06161 Merge pull request #865 from amir20/dependabot/npm_and_yarn/postcss-8.1.14 2020-12-04 00:37:05 +00:00
dependabot-preview[bot] 033e1764f3 Bump postcss from 8.1.13 to 8.1.14
Bumps [postcss](https://github.com/postcss/postcss) from 8.1.13 to 8.1.14.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.1.13...8.1.14)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-04 00:31:22 +00:00
dependabot-preview[bot] 9b29fb1458 Merge pull request #864 from amir20/dependabot/npm_and_yarn/postcss-8.1.13 2020-12-03 03:32:37 +00:00
dependabot-preview[bot] 601385f427 Bump postcss from 8.1.12 to 8.1.13
Bumps [postcss](https://github.com/postcss/postcss) from 8.1.12 to 8.1.13.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.1.12...8.1.13)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-03 03:27:04 +00:00
dependabot-preview[bot] cd8fe9f2d6 Merge pull request #863 from amir20/dependabot/npm_and_yarn/postcss-8.1.12 2020-12-03 02:51:04 +00:00
dependabot-preview[bot] 4bfbb5ef1c Bump postcss from 8.1.10 to 8.1.12
Bumps [postcss](https://github.com/postcss/postcss) from 8.1.10 to 8.1.12.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.1.10...8.1.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-03 02:45:08 +00:00
dependabot-preview[bot] 33d233a4ae Merge pull request #861 from amir20/dependabot/npm_and_yarn/semver-7.3.4 2020-12-01 20:32:58 +00:00
dependabot-preview[bot] 493a7a8bcc Bump semver from 7.3.2 to 7.3.4
Bumps [semver](https://github.com/npm/node-semver) from 7.3.2 to 7.3.4.
- [Release notes](https://github.com/npm/node-semver/releases)
- [Changelog](https://github.com/npm/node-semver/blob/master/CHANGELOG.md)
- [Commits](https://github.com/npm/node-semver/compare/v7.3.2...v7.3.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-01 20:26:11 +00:00
dependabot-preview[bot] c1a9a9c349 Merge pull request #858 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001164 2020-12-01 10:24:45 +00:00
dependabot-preview[bot] b848a58083 Bump caniuse-lite from 1.0.30001163 to 1.0.30001164
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001163 to 1.0.30001164.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001163...v1.0.30001164)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-12-01 10:19:04 +00:00
dependabot-preview[bot] 4b493dbfaa Merge pull request #857 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001163 2020-11-30 20:43:32 +00:00
dependabot-preview[bot] cbdd35f092 Bump caniuse-lite from 1.0.30001161 to 1.0.30001163
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001161 to 1.0.30001163.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001161...v1.0.30001163)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-30 20:37:19 +00:00
dependabot-preview[bot] 0de3dbb5ca Merge pull request #855 from amir20/dependabot/npm_and_yarn/webpack-5.9.0 2020-11-28 22:16:11 +00:00
dependabot-preview[bot] 0dd237e46f Bump webpack from 5.8.0 to 5.9.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.8.0 to 5.9.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.8.0...v5.9.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-28 22:10:36 +00:00
dependabot-preview[bot] 308df33ea7 Merge pull request #854 from amir20/dependabot/npm_and_yarn/prettier-2.2.1 2020-11-28 00:51:59 +00:00
dependabot-preview[bot] 4b1172a12b Bump prettier from 2.2.0 to 2.2.1
Bumps [prettier](https://github.com/prettier/prettier) from 2.2.0 to 2.2.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.2.0...2.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-28 00:45:50 +00:00
dependabot-preview[bot] 1b809a325a Merge pull request #853 from amir20/dependabot/npm_and_yarn/autoprefixer-10.0.4 2020-11-27 21:51:59 +00:00
dependabot-preview[bot] e0e4f16a28 Bump autoprefixer from 10.0.3 to 10.0.4
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.0.3 to 10.0.4.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.0.3...10.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-27 21:45:34 +00:00
dependabot-preview[bot] 66636f3d38 Merge pull request #852 from amir20/dependabot/npm_and_yarn/autoprefixer-10.0.3 2020-11-26 22:19:43 +00:00
dependabot-preview[bot] 199b16c591 Bump autoprefixer from 10.0.2 to 10.0.3
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.0.2 to 10.0.3.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.0.2...10.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 22:13:41 +00:00
dependabot-preview[bot] 6f39c1022f Merge pull request #851 from amir20/dependabot/npm_and_yarn/webpack-5.8.0 2020-11-26 18:13:27 +00:00
dependabot-preview[bot] c3cace7fe5 Bump webpack from 5.7.0 to 5.8.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.7.0 to 5.8.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.7.0...v5.8.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 18:07:38 +00:00
dependabot-preview[bot] cf93ada6eb Merge pull request #850 from amir20/dependabot/npm_and_yarn/release-it-14.2.2 2020-11-26 16:33:52 +00:00
dependabot-preview[bot] 6e7fbd4b36 Bump release-it from 14.2.1 to 14.2.2
Bumps [release-it](https://github.com/release-it/release-it) from 14.2.1 to 14.2.2.
- [Release notes](https://github.com/release-it/release-it/releases)
- [Changelog](https://github.com/release-it/release-it/blob/master/CHANGELOG.md)
- [Commits](https://github.com/release-it/release-it/compare/14.2.1...14.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 16:27:42 +00:00
dependabot-preview[bot] 65e82098f4 Merge pull request #849 from amir20/dependabot/npm_and_yarn/vuex-3.6.0 2020-11-26 13:19:14 +00:00
dependabot-preview[bot] 21b351e2aa Bump vuex from 3.5.1 to 3.6.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.5.1 to 3.6.0.
- [Release notes](https://github.com/vuejs/vuex/releases)
- [Changelog](https://github.com/vuejs/vuex/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vuex/compare/v3.5.1...v3.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 13:13:03 +00:00
dependabot-preview[bot] 6d261dbebf Merge pull request #848 from amir20/dependabot/npm_and_yarn/webpack-5.7.0 2020-11-26 08:49:31 +00:00
dependabot-preview[bot] 84c764b2d7 Bump webpack from 5.6.0 to 5.7.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.6.0 to 5.7.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.6.0...v5.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-26 08:43:48 +00:00
dependabot-preview[bot] 87ed18c06b Merge pull request #845 from amir20/dependabot/npm_and_yarn/babel/core-7.12.9 2020-11-24 21:13:20 +00:00
dependabot-preview[bot] ad7b1b62dc Bump @babel/core from 7.12.8 to 7.12.9
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.12.8 to 7.12.9.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.12.9/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 21:07:28 +00:00
dependabot-preview[bot] 013ac8fe72 Merge pull request #844 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001161 2020-11-24 08:54:13 +00:00
dependabot-preview[bot] 28f3e39bc9 Bump caniuse-lite from 1.0.30001159 to 1.0.30001161
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001159 to 1.0.30001161.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001159...v1.0.30001161)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 08:48:11 +00:00
dependabot-preview[bot] 9d6ea81731 Merge pull request #843 from amir20/dependabot/npm_and_yarn/lint-staged-10.5.2 2020-11-24 05:25:27 +00:00
dependabot-preview[bot] bacc04daa3 Bump lint-staged from 10.5.1 to 10.5.2
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.5.1 to 10.5.2.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.5.1...v10.5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-24 05:19:23 +00:00
dependabot-preview[bot] 0f9b645e37 Merge pull request #842 from amir20/dependabot/npm_and_yarn/babel/core-7.12.8 2020-11-23 22:45:41 +00:00
dependabot-preview[bot] ce3b0a9a48 Bump @babel/core from 7.12.7 to 7.12.8
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.12.7 to 7.12.8.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.12.8/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-23 22:40:14 +00:00
dependabot-preview[bot] a76e516ae0 Merge pull request #841 from amir20/dependabot/npm_and_yarn/postcss-8.1.10 2020-11-23 22:30:39 +00:00
dependabot-preview[bot] c3f688d085 Bump postcss from 8.1.9 to 8.1.10
Bumps [postcss](https://github.com/postcss/postcss) from 8.1.9 to 8.1.10.
- [Release notes](https://github.com/postcss/postcss/releases)
- [Changelog](https://github.com/postcss/postcss/blob/master/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss/compare/8.1.9...8.1.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-23 22:24:34 +00:00
Amir Raminfar fec21b10cc Updates iphone snapshots 2020-11-21 20:17:43 -08:00
Amir Raminfar fb96143ebb Uses screen for overflow 2020-11-21 19:53:32 -08:00
Amir Raminfar 1e4ac6941a Release 3.0.3 2020-11-21 19:43:58 -08:00
Amir Raminfar 23f54e5fa7 Updates mods 2020-11-21 19:43:10 -08:00
Amir Raminfar 1e99a50938 Cleans up CSS 2020-11-21 19:34:07 -08:00
Amir Raminfar 1a76b30046 Clean up settings page 2020-11-21 19:34:07 -08:00
Amir Raminfar e269cc4f63 Keep spaces. Maybe fixes #838 (#840) 2020-11-21 17:58:34 -08:00
dependabot-preview[bot] c3b8ce53d1 Merge pull request #839 from amir20/dependabot/npm_and_yarn/babel/core-7.12.7 2020-11-20 21:45:43 +00:00
dependabot-preview[bot] 08ca9d8463 Bump @babel/core from 7.12.3 to 7.12.7
Bumps [@babel/core](https://github.com/babel/babel/tree/HEAD/packages/babel-core) from 7.12.3 to 7.12.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.12.7/packages/babel-core)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-20 21:39:53 +00:00
Amir Raminfar 39fc41fb44 Fixes text 2020-11-20 10:09:36 -08:00
dependabot-preview[bot] 89682ee54b Merge pull request #837 from amir20/dependabot/npm_and_yarn/splitpanes-2.3.6 2020-11-20 11:08:24 +00:00
dependabot-preview[bot] 47cb8879bc Bump splitpanes from 2.3.5 to 2.3.6
Bumps [splitpanes](https://github.com/antoniandre/splitpanes) from 2.3.5 to 2.3.6.
- [Release notes](https://github.com/antoniandre/splitpanes/releases)
- [Commits](https://github.com/antoniandre/splitpanes/compare/v2.3.5...v2.3.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-20 11:01:28 +00:00
dependabot-preview[bot] 0b01aed9e8 Merge pull request #835 from amir20/dependabot/npm_and_yarn/prettier-2.2.0 2020-11-20 06:03:19 +00:00
dependabot-preview[bot] d7aa93b641 Bump prettier from 2.1.2 to 2.2.0
Bumps [prettier](https://github.com/prettier/prettier) from 2.1.2 to 2.2.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/2.1.2...2.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-20 05:58:06 +00:00
Amir Raminfar fcc34e954e Updates settings page 2020-11-19 16:12:33 -08:00
Amir Raminfar 5f0cdee76c Adds 24 hour option 2020-11-19 15:49:49 -08:00
dependabot-preview[bot] 39c3a871a6 Merge pull request #834 from amir20/dependabot/npm_and_yarn/webpack-5.6.0 2020-11-19 12:31:12 +00:00
dependabot-preview[bot] c84a3ff504 Bump webpack from 5.5.1 to 5.6.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.5.1 to 5.6.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.5.1...v5.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-19 12:24:59 +00:00
dependabot-preview[bot] e11c778b21 Merge pull request #831 from amir20/dependabot/npm_and_yarn/webpack-5.5.1 2020-11-18 12:52:07 +00:00
dependabot-preview[bot] 38e6ebad63 Bump webpack from 5.5.0 to 5.5.1
Bumps [webpack](https://github.com/webpack/webpack) from 5.5.0 to 5.5.1.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.5.0...v5.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-18 12:45:50 +00:00
dependabot-preview[bot] 92fc3dc2af Merge pull request #830 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001159 2020-11-18 09:11:47 +00:00
dependabot-preview[bot] 87d154523d Bump caniuse-lite from 1.0.30001158 to 1.0.30001159
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001158 to 1.0.30001159.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001158...v1.0.30001159)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-18 09:05:38 +00:00
dependabot-preview[bot] 1df91e4e73 Merge pull request #829 from amir20/dependabot/npm_and_yarn/webpack-pwa-manifest-4.3.0 2020-11-17 22:23:33 +00:00
dependabot-preview[bot] 6b65302aae Bump webpack-pwa-manifest from 4.2.0 to 4.3.0
Bumps [webpack-pwa-manifest](https://github.com/arthurbergmz/webpack-pwa-manifest) from 4.2.0 to 4.3.0.
- [Release notes](https://github.com/arthurbergmz/webpack-pwa-manifest/releases)
- [Changelog](https://github.com/arthurbergmz/webpack-pwa-manifest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/arthurbergmz/webpack-pwa-manifest/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-17 22:17:36 +00:00
dependabot-preview[bot] 78afa89042 Merge pull request #828 from amir20/dependabot/npm_and_yarn/webpack-5.5.0 2020-11-17 14:03:35 +00:00
dependabot-preview[bot] 7fd5fb0d0d Bump webpack from 5.4.0 to 5.5.0
Bumps [webpack](https://github.com/webpack/webpack) from 5.4.0 to 5.5.0.
- [Release notes](https://github.com/webpack/webpack/releases)
- [Commits](https://github.com/webpack/webpack/compare/v5.4.0...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-17 13:57:07 +00:00
dependabot-preview[bot] 977a36b94c Merge pull request #827 from amir20/dependabot/npm_and_yarn/splitpanes-2.3.5 2020-11-17 00:16:00 +00:00
dependabot-preview[bot] cda2b88457 Bump splitpanes from 2.3.4 to 2.3.5
Bumps [splitpanes](https://github.com/antoniandre/splitpanes) from 2.3.4 to 2.3.5.
- [Release notes](https://github.com/antoniandre/splitpanes/releases)
- [Commits](https://github.com/antoniandre/splitpanes/compare/v2.3.4...v2.3.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-17 00:10:15 +00:00
dependabot-preview[bot] 15f024eeb7 Merge pull request #826 from amir20/dependabot/npm_and_yarn/integration/puppeteer-5.5.0 2020-11-16 13:56:20 +00:00
dependabot-preview[bot] f3f8e2c73f Bump puppeteer from 5.4.1 to 5.5.0 in /integration
Bumps [puppeteer](https://github.com/puppeteer/puppeteer) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/puppeteer/puppeteer/releases)
- [Changelog](https://github.com/puppeteer/puppeteer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/puppeteer/puppeteer/compare/v5.4.1...v5.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-16 13:50:36 +00:00
dependabot-preview[bot] 0c83495fb9 Merge pull request #825 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001158 2020-11-15 06:43:56 +00:00
dependabot-preview[bot] 5a30db19bc Bump caniuse-lite from 1.0.30001157 to 1.0.30001158
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001157 to 1.0.30001158.
- [Release notes](https://github.com/ben-eb/caniuse-lite/releases)
- [Changelog](https://github.com/ben-eb/caniuse-lite/blob/master/CHANGELOG.md)
- [Commits](https://github.com/ben-eb/caniuse-lite/compare/v1.0.30001157...v1.0.30001158)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-15 06:37:51 +00:00
dependabot-preview[bot] 59db60e26d Merge pull request #824 from amir20/dependabot/npm_and_yarn/mini-css-extract-plugin-1.3.1 2020-11-12 19:08:15 +00:00
dependabot-preview[bot] 9914370265 Bump mini-css-extract-plugin from 1.3.0 to 1.3.1
Bumps [mini-css-extract-plugin](https://github.com/webpack-contrib/mini-css-extract-plugin) from 1.3.0 to 1.3.1.
- [Release notes](https://github.com/webpack-contrib/mini-css-extract-plugin/releases)
- [Changelog](https://github.com/webpack-contrib/mini-css-extract-plugin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/mini-css-extract-plugin/compare/v1.3.0...v1.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-12 19:02:50 +00:00
dependabot-preview[bot] ddfd8a0b3c Merge pull request #823 from amir20/dependabot/npm_and_yarn/sass-loader-10.1.0 2020-11-11 13:16:43 +00:00
dependabot-preview[bot] e287b418ab Bump sass-loader from 10.0.5 to 10.1.0
Bumps [sass-loader](https://github.com/webpack-contrib/sass-loader) from 10.0.5 to 10.1.0.
- [Release notes](https://github.com/webpack-contrib/sass-loader/releases)
- [Changelog](https://github.com/webpack-contrib/sass-loader/blob/master/CHANGELOG.md)
- [Commits](https://github.com/webpack-contrib/sass-loader/compare/v10.0.5...v10.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-11-11 13:11:41 +00:00
34 changed files with 1660 additions and 2075 deletions
+67
View File
@@ -0,0 +1,67 @@
# For most projects, this workflow file will not need changing; you simply need
# to commit it to your repository.
#
# You may wish to alter this file to override the set of languages analyzed,
# or to provide custom queries or build logic.
#
# ******** NOTE ********
# We have attempted to detect the languages in your repository. Please check
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
on:
push:
branches: [ master ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
schedule:
- cron: '42 21 * * 0'
jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
language: [ 'go', 'javascript' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
# ️ Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
# and modify them (or add more) to build your code if your project
# uses a compiled language
#- run: |
# make bootstrap
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
+1
View File
@@ -0,0 +1 @@
_
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
. "$(dirname $0)/_/husky.sh"
yarn lint-staged
+1 -1
View File
@@ -1 +1 @@
-r '\.go$' -R 'node_modules' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go routes.go --level debug
-r '\.go$' -R 'node_modules' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go --level debug
+1 -1
View File
@@ -7,7 +7,7 @@ WORKDIR /build
# Install dependencies
COPY package*.json yarn.lock ./
RUN yarn install --network-timeout 1000000
RUN yarn install --ignore-scripts --network-timeout 1000000
# Copy config files
COPY .* webpack*.js ./
+32 -1
View File
@@ -1,13 +1,26 @@
<template>
<scrollable-view :scrollable="scrollable" v-if="container">
<template v-slot:header v-if="showTitle">
<div class="columns is-vcentered mr-0">
<div class="columns is-vcentered mr-0 is-hidden-mobile">
<div class="column is-narrow">
<container-title :value="container.name" @close="$emit('close')"></container-title>
</div>
<div class="column is-clipped">
<container-stat :stat="container.stat" :state="container.state"></container-stat>
</div>
<div class="column is-narrow">
<a
class="button is-small is-outlined"
id="download"
:href="`${base}/api/logs/download?id=${container.id}`"
download
>
<span class="icon">
<icon name="save"></icon>
</span>
Download
</a>
</div>
<div class="column is-narrow" v-if="closable">
<button class="delete is-medium" @click="$emit('close')"></button>
</div>
@@ -26,6 +39,8 @@ import LogViewerWithSource from "./LogViewerWithSource";
import ScrollableView from "./ScrollableView";
import ContainerTitle from "./ContainerTitle";
import ContainerStat from "./ContainerStat";
import Icon from "./Icon";
import config from "../store/config";
export default {
props: {
@@ -51,12 +66,16 @@ export default {
ScrollableView,
ContainerTitle,
ContainerStat,
Icon,
},
computed: {
...mapGetters(["allContainersById"]),
container() {
return this.allContainersById[this.id];
},
base() {
return config.base;
},
},
};
</script>
@@ -73,4 +92,16 @@ button.delete {
opacity: 1;
}
}
#download.button {
.icon {
margin-right: 5px;
height: 80%;
}
&:hover {
color: var(--primary-color);
border-color: var(--primary-color);
}
}
</style>
+7 -7
View File
@@ -81,7 +81,7 @@ describe("<LogEventSource />", () => {
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2019-06-12T10:55:42.459Z,
"message": "\\"This is a message.\\"",
"message": " \\"This is a message.\\"",
}
`);
});
@@ -98,7 +98,7 @@ describe("<LogEventSource />", () => {
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2020-04-27T10:35:43.272Z,
"message": "xxxxx",
"message": " xxxxx",
}
`);
});
@@ -116,7 +116,7 @@ describe("<LogEventSource />", () => {
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2019-06-12T10:55:42.459Z,
"message": "\\"This is a message.\\"",
"message": " \\"This is a message.\\"",
}
`);
});
@@ -144,7 +144,7 @@ describe("<LogEventSource />", () => {
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text">"This is a message."</span></li>
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"> "This is a message."</span></li>
</ul>
`);
});
@@ -159,7 +159,7 @@ describe("<LogEventSource />", () => {
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"> <span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
</ul>
`);
});
@@ -174,7 +174,7 @@ describe("<LogEventSource />", () => {
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text">&lt;test&gt;foo bar&lt;/test&gt;</span></li>
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"> &lt;test&gt;foo bar&lt;/test&gt;</span></li>
</ul>
`);
});
@@ -192,7 +192,7 @@ describe("<LogEventSource />", () => {
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text">This is a <mark>test</mark> &lt;hi&gt;&lt;/hi&gt;</span></li>
<li class=""><span class="date"><time datetime="2019-06-12T10:55:42.459Z">today at 10:55 AM</time></span> <span class="text"> This is a <mark>test</mark> &lt;hi&gt;&lt;/hi&gt;</span></li>
</ul>
`);
});
+1 -1
View File
@@ -84,7 +84,7 @@ export default {
}
const key = data.substring(0, i);
const date = new Date(key);
const message = data.substring(i).trim();
const message = data.substring(i);
return { key, date, message };
},
},
+11 -3
View File
@@ -1,8 +1,9 @@
<template>
<time :datetime="date.toISOString()">{{ date | relativeTime }}</time>
<time :datetime="date.toISOString()">{{ date | relativeTime(locale) }}</time>
</template>
<script>
import { mapActions, mapState } from "vuex";
import { formatRelative } from "date-fns";
import { enGB, enUS } from "date-fns/locale";
@@ -13,7 +14,8 @@ const use24Hr =
.formatToParts(new Date(2020, 0, 1, 13))
.find((part) => part.type === "hour").value.length === 2;
const locale = use24Hr ? enGB : enUS;
const auto = use24Hr ? enGB : enUS;
const styles = { auto, 12: enUS, 24: enGB };
export default {
props: {
@@ -25,8 +27,14 @@ export default {
name: "RelativeTime",
components: {},
computed: {
...mapState(["settings"]),
locale() {
return styles[this.settings.hourStyle];
},
},
filters: {
relativeTime(date) {
relativeTime(date, locale) {
return formatRelative(date, new Date(), { locale });
},
},
+3
View File
File diff suppressed because one or more lines are too long
+4 -2
View File
@@ -1,8 +1,9 @@
import Vue from "vue";
import VueRouter from "vue-router";
import Meta from "vue-meta";
import Dropdown from "buefy/dist/esm/dropdown";
import Switch from "buefy/dist/esm/switch";
import Radio from "buefy/dist/esm/radio";
import Field from "buefy/dist/esm/field";
import store from "./store";
import config from "./store/config";
import App from "./App.vue";
@@ -10,8 +11,9 @@ import { Container, Settings, Index, Show, ContainerNotFound, PageNotFound } fro
Vue.use(VueRouter);
Vue.use(Meta);
Vue.use(Dropdown);
Vue.use(Switch);
Vue.use(Radio);
Vue.use(Field);
const routes = [
{
+54 -50
View File
@@ -17,10 +17,61 @@
</span>
</div>
</section>
<section class="section">
<div class="has-underline">
<h2 class="title is-4">Display</h2>
</div>
<div class="item">
<div class="columns is-vcentered">
<div class="column is-narrow">
<b-field>
<b-radio-button
v-model="hourStyle"
:native-value="value"
v-for="value in ['auto', '12', '24']"
:key="value"
>
<span class="is-capitalized">{{ value }}</span>
</b-radio-button>
</b-field>
</div>
<div class="column">
By default, Dozzle will use your browser's locale to format time. You can force to 12 or 24 hour style.
</div>
</div>
<div class="item">
<b-switch v-model="smallerScrollbars"> Use smaller scrollbars </b-switch>
</div>
<div class="item">
<b-switch v-model="showTimestamp"> Show timestamps </b-switch>
</div>
</div>
<div class="item">
<div class="columns is-vcentered">
<div class="column is-narrow">
<b-field>
<b-radio-button
v-model="size"
:native-value="value"
v-for="value in ['small', 'medium', 'large']"
:key="value"
>
<span class="is-capitalized">{{ value }}</span>
</b-radio-button>
</b-field>
</div>
<div class="column">Font size to use for logs</div>
</div>
</div>
</section>
<section class="section">
<div class="has-underline">
<h2 class="title is-4">Options</h2>
</div>
<div class="item">
<b-switch v-model="search">
Enable searching with Dozzle using <code>command+f</code> or <code>ctrl+f</code>
@@ -28,58 +79,11 @@
</div>
<div class="item">
<b-switch v-model="smallerScrollbars">
Use smaller scrollbars
</b-switch>
<b-switch v-model="showAllContainers"> Show stopped containers </b-switch>
</div>
<div class="item">
<b-switch v-model="showTimestamp">
Show timestamps
</b-switch>
</div>
<div class="item">
<b-switch v-model="showAllContainers">
Show stopped containers
</b-switch>
</div>
<div class="item">
<b-switch v-model="lightTheme">
Use light theme
</b-switch>
</div>
<div class="item">
<div class="columns is-vcentered is-mobile is-variable is-2">
<div class="column is-narrow">
<b-dropdown v-model="size" aria-role="list">
<button class="button is-primary" type="button" slot="trigger">
<span class="is-capitalized">{{ size }}</span>
<span class="icon"><icon name="chevron-down"></icon></span>
</button>
<b-dropdown-item
:value="value"
aria-role="listitem"
v-for="value in ['small', 'medium', 'large']"
:key="value"
>
<div class="media">
<span class="icon keep-size">
<icon name="check" v-if="value == size"></icon>
</span>
<div class="media-content">
<h3 class="is-capitalized">{{ value }}</h3>
</div>
</div>
</b-dropdown-item>
</b-dropdown>
</div>
<div class="column">
Font size to use for logs
</div>
</div>
<b-switch v-model="lightTheme"> Use light theme </b-switch>
</div>
</section>
</div>
@@ -126,7 +130,7 @@ export default {
},
computed: {
...mapState(["settings"]),
...["search", "size", "smallerScrollbars", "showTimestamp", "showAllContainers", "lightTheme"].reduce(
...["search", "size", "smallerScrollbars", "showTimestamp", "showAllContainers", "lightTheme", "hourStyle"].reduce(
(map, name) => {
map[name] = {
get() {
+1 -1
View File
@@ -1,4 +1,4 @@
<template> </template>
<template></template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
+19 -10
View File
@@ -20,10 +20,7 @@ const state = {
const mutations = {
SET_CONTAINERS(state, containers) {
const containersById = state.containers.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {});
const containersById = getters.allContainersById({ containers });
containers.forEach(
(container) =>
@@ -51,8 +48,10 @@ const mutations = {
state.settings = { ...state.settings, ...newValues };
storage.set(DOZZLE_SETTINGS_KEY, state.settings);
},
UPDATE_STAT(state, { container, stat }) {
Vue.set(container, "stat", stat);
UPDATE_CONTAINER(_, { container, data }) {
for (const [key, value] of Object.entries(data)) {
Vue.set(container, key, value);
}
},
};
@@ -69,14 +68,23 @@ const actions = {
UPDATE_SETTING({ commit }, setting) {
commit("UPDATE_SETTINGS", setting);
},
UPDATE_STATS({ commit, getters }, stat) {
const { allContainersById } = getters;
UPDATE_STATS({ commit, getters: { allContainersById } }, stat) {
const container = allContainersById[stat.id];
if (container) {
commit("UPDATE_STAT", { container, stat });
commit("UPDATE_CONTAINER", { container, data: { stat } });
}
},
UPDATE_CONTAINER({ commit, getters: { allContainersById } }, event) {
switch (event.name) {
case "die":
const container = allContainersById[event.actorId];
commit("UPDATE_CONTAINER", { container, data: { state: "exited" } });
break;
default:
}
},
};
const getters = {
allContainersById({ containers }) {
return containers.reduce((map, obj) => {
@@ -96,8 +104,9 @@ const getters = {
const es = new EventSource(`${config.base}/api/events/stream`);
es.addEventListener("containers-changed", (e) => store.commit("SET_CONTAINERS", JSON.parse(e.data)), false);
es.addEventListener("container-stat", (e) => store.dispatch("UPDATE_STATS", JSON.parse(e.data)), false);
es.addEventListener("container-die", (e) => store.dispatch("UPDATE_CONTAINER", JSON.parse(e.data)), false);
mql.addListener((e) => store.commit("SET_MOBILE_WIDTH", e.matches));
mql.addEventListener("change", (e) => store.commit("SET_MOBILE_WIDTH", e.matches));
const store = new Vuex.Store({
state,
+2 -1
View File
@@ -6,5 +6,6 @@ export const DEFAULT_SETTINGS = {
smallerScrollbars: false,
showTimestamp: true,
showAllContainers: false,
lightTheme: false
lightTheme: false,
hourStyle: "auto",
};
+6 -4
View File
@@ -28,8 +28,8 @@ $link-active: $grey-dark;
@import "~bulma";
@import "../node_modules/splitpanes/dist/splitpanes.css";
@import "~buefy/src/scss/utils/_all";
@import "~buefy/src/scss/components/_dropdown";
@import "~buefy/src/scss/components/_switch";
@import "~buefy/src/scss/components/_radio";
html {
--scheme-main: #{$black};
@@ -135,11 +135,13 @@ html.has-custom-scrollbars {
border-color: transparent;
}
}
.splitpanes__pane {
overflow: unset;
@media screen and (min-width: 770px) {
.splitpanes__pane {
overflow: unset;
}
}
.splitpanes__splitter {
z-index: 99;
}
+45 -81
View File
@@ -1,10 +1,7 @@
package docker
import (
"bufio"
"bytes"
"context"
"encoding/binary"
"encoding/json"
"fmt"
"io"
@@ -37,9 +34,9 @@ type dockerProxy interface {
type Client interface {
ListContainers() ([]Container, error)
FindContainer(string) (Container, error)
ContainerLogs(context.Context, string, int, string) (<-chan string, <-chan error)
Events(context.Context) (<-chan events.Message, <-chan error)
ContainerLogsBetweenDates(context.Context, string, time.Time, time.Time) ([]string, error)
ContainerLogs(context.Context, string, int, string) (io.ReadCloser, error)
Events(context.Context) (<-chan ContainerEvent, <-chan error)
ContainerLogsBetweenDates(context.Context, string, time.Time, time.Time) (io.ReadCloser, error)
ContainerStats(context.Context, string, chan<- ContainerStat) error
}
@@ -121,34 +118,6 @@ func (d *dockerClient) ListContainers() ([]Container, error) {
return containers, nil
}
func logReader(reader io.ReadCloser, tty bool) func() (string, error) {
if tty {
scanner := bufio.NewScanner(reader)
return func() (string, error) {
if scanner.Scan() {
return scanner.Text(), nil
}
return "", io.EOF
}
}
hdr := make([]byte, 8)
var buffer bytes.Buffer
return func() (string, error) {
buffer.Reset()
_, err := reader.Read(hdr)
if err != nil {
return "", err
}
count := binary.BigEndian.Uint32(hdr[4:])
_, err = io.CopyN(&buffer, reader, int64(count))
if err != nil {
return "", err
}
return strings.TrimSpace(buffer.String()), nil
}
}
func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan<- ContainerStat) error {
response, err := d.cli.ContainerStats(ctx, id, true)
@@ -157,6 +126,7 @@ func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan
}
go func() {
log.Debugf("starting to stream stats for: %s", id)
defer response.Body.Close()
decoder := json.NewDecoder(response.Body)
var v *types.StatsJSON
@@ -164,7 +134,7 @@ func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan
if err := decoder.Decode(&v); err != nil {
if err == context.Canceled || err == io.EOF {
log.Debugf("stopping stats streaming for container %s", id)
break
return
}
log.Errorf("decoder for stats api returned an unknown error %v", err)
}
@@ -178,11 +148,15 @@ func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan
)
if cpuPercent > 0 || memUsage > 0 {
stats <- ContainerStat{
select {
case <-ctx.Done():
return
case stats <- ContainerStat{
ID: id,
CPUPercent: cpuPercent,
MemoryPercent: memPercent,
MemoryUsage: memUsage,
}:
}
}
}
@@ -191,8 +165,8 @@ func (d *dockerClient) ContainerStats(ctx context.Context, id string, stats chan
return nil
}
func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (<-chan string, <-chan error) {
log.WithField("id", id).WithField("since", since).Debug("Streaming logs for container")
func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (io.ReadCloser, error) {
log.WithField("id", id).WithField("since", since).Debug("streaming logs for container")
options := types.ContainerLogsOptions{
ShowStdout: true,
@@ -202,49 +176,47 @@ func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize in
Timestamps: true,
Since: since,
}
reader, err := d.cli.ContainerLogs(ctx, id, options)
errChannel := make(chan error, 1)
reader, err := d.cli.ContainerLogs(ctx, id, options)
if err != nil {
errChannel <- err
close(errChannel)
return nil, errChannel
return nil, err
}
messages := make(chan string)
go func() {
<-ctx.Done()
reader.Close()
}()
containerJSON, err := d.cli.ContainerInspect(ctx, id)
if err != nil {
return nil, err
}
containerJSON, _ := d.cli.ContainerInspect(ctx, id)
return newLogReader(reader, containerJSON.Config.Tty), nil
}
func (d *dockerClient) Events(ctx context.Context) (<-chan ContainerEvent, <-chan error) {
dockerMessages, errors := d.cli.Events(ctx, types.EventsOptions{})
messages := make(chan ContainerEvent)
go func() {
defer close(messages)
defer close(errChannel)
defer reader.Close()
nextEntry := logReader(reader, containerJSON.Config.Tty)
for {
line, err := nextEntry()
if err != nil {
errChannel <- err
break
}
select {
case messages <- line:
case <-ctx.Done():
return
case message, ok := <-dockerMessages:
if !ok {
return
}
messages <- ContainerEvent{
ActorID: message.Actor.ID[:12],
Name: message.Action,
}
}
}
}()
return messages, errChannel
return messages, errors
}
func (d *dockerClient) Events(ctx context.Context) (<-chan events.Message, <-chan error) {
return d.cli.Events(ctx, types.EventsOptions{})
}
func (d *dockerClient) ContainerLogsBetweenDates(ctx context.Context, id string, from time.Time, to time.Time) ([]string, error) {
func (d *dockerClient) ContainerLogsBetweenDates(ctx context.Context, id string, from time.Time, to time.Time) (io.ReadCloser, error) {
options := types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: true,
@@ -252,25 +224,17 @@ func (d *dockerClient) ContainerLogsBetweenDates(ctx context.Context, id string,
Since: strconv.FormatInt(from.Unix(), 10),
Until: strconv.FormatInt(to.Unix(), 10),
}
reader, _ := d.cli.ContainerLogs(ctx, id, options)
defer reader.Close()
containerJSON, _ := d.cli.ContainerInspect(ctx, id)
reader, err := d.cli.ContainerLogs(ctx, id, options)
nextEntry := logReader(reader, containerJSON.Config.Tty)
var messages []string
for {
line, err := nextEntry()
if err != nil {
if err == io.EOF {
break
} else {
return nil, err
}
}
messages = append(messages, line)
if err != nil {
return nil, err
}
return messages, nil
containerJSON, err := d.cli.ContainerInspect(ctx, id)
if err != nil {
return nil, err
}
return newLogReader(reader, containerJSON.Config.Tty), nil
}
+12 -20
View File
@@ -7,6 +7,7 @@ import (
"errors"
"io"
"io/ioutil"
"strings"
"testing"
"github.com/docker/docker/api/types"
@@ -51,7 +52,7 @@ func (m *mockedProxy) ContainerInspect(ctx context.Context, containerID string)
return json, args.Error(1)
}
func (m *mockedProxy) ContainerStats(ctx context.Context, containerID string, stream bool) (types.ContainerStats, error) {
func (m *mockedProxy) ContainerStats(ctx context.Context, containerID string, stream bool) (types.ContainerStats, error) {
return types.ContainerStats{}, nil
}
@@ -132,13 +133,10 @@ func Test_dockerClient_ContainerLogs_happy(t *testing.T) {
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300, "since")
logReader, _ := client.ContainerLogs(context.Background(), id, 300, "since")
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
_, ok := <-messages
assert.False(t, ok, "channel should have been closed")
actual, _ := ioutil.ReadAll(logReader)
assert.Equal(t, expected, string(actual), "message doesn't match expected")
proxy.AssertExpectations(t)
}
@@ -148,7 +146,7 @@ func Test_dockerClient_ContainerLogs_happy_with_tty(t *testing.T) {
proxy := new(mockedProxy)
expected := "INFO Testing logs..."
reader := ioutil.NopCloser(bytes.NewReader([]byte(expected)))
reader := ioutil.NopCloser(strings.NewReader(expected))
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
proxy.On("ContainerLogs", mock.Anything, id, options).Return(reader, nil)
@@ -156,13 +154,11 @@ func Test_dockerClient_ContainerLogs_happy_with_tty(t *testing.T) {
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300, "")
logReader, _ := client.ContainerLogs(context.Background(), id, 300, "")
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
actual, _ := ioutil.ReadAll(logReader)
assert.Equal(t, expected, string(actual), "message doesn't match expected")
_, ok := <-messages
assert.False(t, ok, "channel should have been closed")
proxy.AssertExpectations(t)
}
@@ -174,14 +170,10 @@ func Test_dockerClient_ContainerLogs_error(t *testing.T) {
client := &dockerClient{proxy, filters.NewArgs()}
messages, err := client.ContainerLogs(context.Background(), id, 300, "")
reader, err := client.ContainerLogs(context.Background(), id, 300, "")
assert.Nil(t, messages, "messages should be nil")
e, _ := <-err
assert.Error(t, e, "error should have been returned")
_, ok := <-err
assert.False(t, ok, "error channel should have been closed")
assert.Nil(t, reader, "reader should be nil")
assert.Error(t, err, "error should have been returned")
proxy.AssertExpectations(t)
}
+49
View File
@@ -0,0 +1,49 @@
package docker
import (
"bytes"
"encoding/binary"
"io"
)
type logReader struct {
readerCloser io.ReadCloser
tty bool
lastHeader []byte
buffer bytes.Buffer
}
func newLogReader(reader io.ReadCloser, tty bool) io.ReadCloser {
return &logReader{
reader,
tty,
make([]byte, 8),
bytes.Buffer{},
}
}
func (r *logReader) Read(p []byte) (n int, err error) {
if r.tty {
return r.readerCloser.Read(p)
} else {
if r.buffer.Len() > 0 {
return r.buffer.Read(p)
} else {
r.buffer.Reset()
_, err := r.readerCloser.Read(r.lastHeader)
if err != nil {
return 0, err
}
count := binary.BigEndian.Uint32(r.lastHeader[4:])
_, err = io.CopyN(&r.buffer, r.readerCloser, int64(count))
if err != nil {
return 0, err
}
return r.buffer.Read(p)
}
}
}
func (r *logReader) Close() error {
return r.readerCloser.Close()
}
+6
View File
@@ -20,3 +20,9 @@ type ContainerStat struct {
MemoryPercent int64 `json:"memory"`
MemoryUsage int64 `json:"memoryUsage"`
}
// ContainerEvent represents events that are triggered
type ContainerEvent struct {
ActorID string `json:"actorId"`
Name string `json:"name"`
}
+21 -30
View File
@@ -1,55 +1,46 @@
module github.com/amir20/dozzle
replace github.com/docker/docker v0.0.0-20190827232753-32688a47f341 => github.com/docker/engine v0.0.0-20190827232753-32688a47f341
// github.com/docker/engine v19.06.1-ce
replace github.com/docker/docker => github.com/docker/engine v0.0.0-20190827232753-32688a47f341
// github.com/docker/distribution master
// a proper tagged release is expected in early fall(September 2018)
// see; https://github.com/docker/distribution/issues/2693
replace github.com/docker/distribution => github.com/docker/distribution v0.0.0-20190711223531-1fb7fffdb266
require (
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 // indirect
github.com/Microsoft/go-winio v0.4.14 // indirect
github.com/Microsoft/go-winio v0.4.16 // indirect
github.com/beme/abide v0.0.0-20190723115211-635a09831760
github.com/containerd/containerd v1.4.0 // indirect
github.com/containerd/containerd v1.4.3 // indirect
github.com/docker/distribution v2.7.1+incompatible // indirect
github.com/docker/docker v0.0.0-20190827232753-32688a47f341
github.com/docker/docker v20.10.2+incompatible
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // indirect
github.com/dustin/go-humanize v1.0.0
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/gobuffalo/envy v1.9.0 // indirect
github.com/gobuffalo/packd v1.0.0 // indirect
github.com/gobuffalo/packr v1.30.1
github.com/gogo/protobuf v1.3.1 // indirect
github.com/golang/protobuf v1.4.2 // indirect
github.com/golang/protobuf v1.4.3 // indirect
github.com/gorilla/mux v1.8.0
github.com/magiconair/properties v1.8.4
github.com/mitchellh/mapstructure v1.3.3 // indirect
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c // indirect
github.com/mitchellh/mapstructure v1.4.0 // indirect
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.0.1 // indirect
github.com/pelletier/go-toml v1.8.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pelletier/go-toml v1.8.1 // indirect
github.com/rogpeppe/go-internal v1.6.2 // indirect
github.com/sergi/go-diff v1.0.0 // indirect
github.com/sergi/go-diff v1.1.0 // indirect
github.com/sirupsen/logrus v1.7.0
github.com/spf13/afero v1.3.5 // indirect
github.com/spf13/afero v1.5.1 // indirect
github.com/spf13/cast v1.3.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5
github.com/spf13/viper v1.7.1
github.com/stretchr/objx v0.2.0 // indirect
github.com/stretchr/testify v1.6.1
golang.org/x/net v0.0.0-20200904194848-62affa334b73 // indirect
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f // indirect
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d // indirect
google.golang.org/grpc v1.32.0 // indirect
google.golang.org/protobuf v1.25.0 // indirect
gopkg.in/ini.v1 v1.61.0 // indirect
gotest.tools v2.2.0+incompatible // indirect
github.com/stretchr/objx v0.3.0 // indirect
github.com/stretchr/testify v1.7.0
golang.org/x/net v0.0.0-20201216054612-986b41b23924 // indirect
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e // indirect
golang.org/x/text v0.3.4 // indirect
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d // indirect
google.golang.org/grpc v1.34.0 // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gotest.tools/v3 v3.0.3 // indirect
)
go 1.14
+64 -93
View File
@@ -11,43 +11,32 @@ cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqCl
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/Microsoft/go-winio v0.4.14 h1:+hMXMk01us9KgxGb7ftKQt2Xpf5hH/yky+TDA+qxleU=
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk=
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU=
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ=
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0=
github.com/beme/abide v0.0.0-20190723115211-635a09831760 h1:FvTM5NSN5HYvfKpgL+8x73U5v063vHsd7AX05eV1DnM=
github.com/beme/abide v0.0.0-20190723115211-635a09831760/go.mod h1:6+8gCKsZnxzhGTmKRh4BSkLos9CbWRJNcrp55We4SqQ=
github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8=
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk=
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50=
github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/containerd/containerd v1.4.0 h1:aWJB3lbDEaOxg1mkTBAINY2a+NsoKbAeRYefJPPRY+o=
github.com/containerd/containerd v1.4.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/containerd/containerd v1.4.3 h1:ijQT13JedHSHrQGWFcGEwzcNKrAGIiZ+jSD5QQG07SY=
github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
@@ -57,37 +46,34 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE=
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0=
github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
github.com/docker/distribution v0.0.0-20190711223531-1fb7fffdb266 h1:6BCth6L0iZKTU3F0OxqlkECwdmUDLbHdD9qz6HXlpb4=
github.com/docker/distribution v0.0.0-20190711223531-1fb7fffdb266/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY=
github.com/docker/engine v0.0.0-20190827232753-32688a47f341 h1:EZsx4y4IdfCZofMwt/ICb/8P5TgSR69Zrnw21vOHKc0=
github.com/docker/engine v0.0.0-20190827232753-32688a47f341/go.mod h1:3CPr2caMgTHxxIAZgEMd3uLYPDlRvPqCpyeRf6ncPcY=
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
github.com/docker/docker v20.10.2+incompatible h1:vFgEHPqWBTp4pTjdLwjAA4bSo3gvIGOYwuJTlEjVBCw=
github.com/docker/docker v20.10.2+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI=
github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE=
github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo=
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE=
github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk=
@@ -121,15 +107,15 @@ github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -143,12 +129,12 @@ github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXi
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
@@ -169,6 +155,7 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b
github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
@@ -177,8 +164,6 @@ github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0m
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo=
@@ -194,8 +179,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.2 h1:DB17ag19krx9CFsz4o3enTrPXyIXCl+2iCXH/aMAp9s=
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
@@ -206,13 +189,8 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4=
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
github.com/magiconair/properties v1.8.2 h1:znVR8Q4g7/WlcvsxLBRWvo+vtFJUAbDn3w+Yak2xVMI=
github.com/magiconair/properties v1.8.2/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/magiconair/properties v1.8.3 h1:kJSsc6EXkBLgr3SphHk9w5mtjn0bjlR4JYEXKrJ45rQ=
github.com/magiconair/properties v1.8.3/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/magiconair/properties v1.8.4 h1:8KGKTcQQGm0Kv7vEbKFErAoAOFyyacLStRtQSeYtvkY=
github.com/magiconair/properties v1.8.4/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
@@ -226,27 +204,25 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/mapstructure v1.3.3 h1:SzB1nHZ2Xi+17FP0zVQBHIZqvwRN9408fJO8h+eeNA8=
github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
github.com/mitchellh/mapstructure v1.4.0 h1:7ks8ZkOP5/ujthUsT07rNv+nkLXCQWKNHuwzOAesEks=
github.com/mitchellh/mapstructure v1.4.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk=
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c h1:nXxl5PrvVm2L/wCy8dQu6DMTwH4oIuGN8GJDAlqDdVE=
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
github.com/pelletier/go-toml v1.2.0 h1:T5zMGML61Wp+FlcbWjRDT7yAxhJNAiPPLOFECq181zc=
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
github.com/pelletier/go-toml v1.8.0 h1:Keo9qb7iRJs2voHvunFtuuYFsbWeOBh8/P9v/kVMFtw=
github.com/pelletier/go-toml v1.8.0/go.mod h1:D6yutnOGMveHEPV7VQOuvI/gXY61bv+9bAOTRnLElKs=
github.com/pelletier/go-toml v1.8.1 h1:1Nf83orprkJyknT6h7zbuEGUEjcyVlCxSUGTENmNCRM=
github.com/pelletier/go-toml v1.8.1/go.mod h1:T2/BmBdy8dvIRq1a/8aqjN41wvWlN4lrapLU/GW4pbc=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
@@ -257,17 +233,13 @@ github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZ
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
@@ -281,34 +253,29 @@ github.com/rogpeppe/go-internal v1.6.2 h1:aIihoIOHCiLZHxyoNQ+ABL4NKhFTgKLBdMLyEA
github.com/rogpeppe/go-internal v1.6.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
github.com/sergi/go-diff v1.0.0 h1:Kpca3qRNrduNnOQeazBd0ysaKrUJiIuISHxogkT9RPQ=
github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo=
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/sirupsen/logrus v1.6.0 h1:UBcNElsrwanuuMsnGSlYmtmgbb23qDR5dG+6X6Oo89I=
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/spf13/afero v1.1.2 h1:m8/z1t7/fwjysjQRYbP0RD+bUIF/8tJwPdEZsI83ACI=
github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ=
github.com/spf13/afero v1.3.5 h1:AWZ/w4lcfxuh52NVL78p9Eh8j6r1mCTEGSRFBJyIHAE=
github.com/spf13/afero v1.3.5/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/afero v1.5.1 h1:VHu76Lk0LSP1x254maIu2bplkWpfBWI+B+6fdoZprcg=
github.com/spf13/afero v1.5.1/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I=
github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8=
github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng=
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU=
github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk=
github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo=
@@ -324,26 +291,25 @@ github.com/spf13/viper v1.7.1 h1:pM5oEahlgWv/WnHXpgbKz7iLIxRf65tye2Ci+XFK5sk=
github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/objx v0.3.0 h1:NGXK3lHquSN08v5vWalVI/L8XU9hdzE/G6xsrze47As=
github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs=
github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA=
github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg=
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE=
go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0=
@@ -356,7 +322,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -370,6 +335,7 @@ golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTk
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de h1:5hukYrvBGR8/eNkX5mdUezrA6JiaEZDtJb9Ei+1LlBs=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
@@ -389,10 +355,9 @@ golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201216054612-986b41b23924 h1:QsnDpLLOKwHBBDa8nDws4DYNc/ryVW2vCpxCs09d4PY=
golang.org/x/net v0.0.0-20201216054612-986b41b23924/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -418,20 +383,25 @@ golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438 h1:khxRGsvPk4n2y8I/mLLjp7e5dMTJmH75wvqS6nMwUtY=
golang.org/x/sys v0.0.0-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f h1:Fqb3ao1hUmOR3GkUOg/Y+BadLwykBIzs5q8Ez2SbHyc=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68 h1:nxC68pudNYkKU6jWhgrqdreuFiOQWj1Fs7T3VrH4Pjw=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e h1:AyodaIpKjppX+cBfTASF2E1US3H2JFBj920Ot3rtDjs=
golang.org/x/sys v0.0.0-20201214210602-f9fddec55a1e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -450,15 +420,16 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc h1:NCy3Ohtk6Iny5V/reW2Ktypo4zIpWBdRJ1uFMjBxdg8=
golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -468,7 +439,6 @@ google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9Ywl
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8 h1:Nw54tB0rB7hY/N0NQvRW8DG4Yk3Q6T9cu9RcFQDu1tc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
@@ -480,17 +450,16 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d h1:92D1fum1bJLKSdr11OJ+54YeCMCGYIygTA7R/YZxH5M=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d h1:HV9Z9qMhQEsdlvxNFELgQ11RkMzO3CMkjEySjCtuLes=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.32.0 h1:zWTV+LMdc3kaiJMSTOFz2UgSBgx8RNQoTGiZu3fR9S0=
google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -505,14 +474,15 @@ google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.51.0 h1:AQvPpx3LzTDM0AjnIRlVFwFFGC+npRopjZxLJj6gdno=
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.61.0 h1:LBCdW4FmFYL4s/vDZD1RQYX7oAR6IjujCYgMdbHBR10=
gopkg.in/ini.v1 v1.61.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU=
gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
@@ -520,12 +490,13 @@ gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU=
gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 79 KiB

+37 -23
View File
@@ -1318,10 +1318,10 @@ detect-newline@^3.0.0:
resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651"
integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==
devtools-protocol@0.0.809251:
version "0.0.809251"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.809251.tgz#300b3366be107d5c46114ecb85274173e3999518"
integrity sha512-pf+2OY6ghMDPjKkzSWxHMq+McD+9Ojmq5XVRYpv/kPd9sTMQxzEt21592a31API8qRjro0iYYOc3ag46qF/1FA==
devtools-protocol@0.0.818844:
version "0.0.818844"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.818844.tgz#d1947278ec85b53e4c8ca598f607a28fa785ba9e"
integrity sha512-AD1hi7iVJ8OD0aMLQU5VK0XH9LDlA1+BcPIgrAxPfaibx2DbWucuyOhc4oyQCbnvDDO68nN6/LcKfqTP343Jjg==
diff-sequences@^26.6.2:
version "26.6.2"
@@ -1919,9 +1919,9 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4:
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
ini@^1.3.4:
version "1.3.5"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927"
integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==
version "1.3.7"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84"
integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==
ip-regex@^2.1.0:
version "2.1.0"
@@ -2317,9 +2317,9 @@ jest-haste-map@^26.6.2:
fsevents "^2.1.2"
jest-image-snapshot@^4.0.0:
version "4.2.0"
resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.2.0.tgz#559d7ade69e9918517269cef184261c80029a69e"
integrity sha512-6aAqv2wtfOgxiJeBayBCqHo1zX+A12SUNNzo7rIxiXh6W6xYVu8QyHWkada8HeRi+QUTHddp0O0Xa6kmQr+xbQ==
version "4.3.0"
resolved "https://registry.yarnpkg.com/jest-image-snapshot/-/jest-image-snapshot-4.3.0.tgz#27ecd571aec2922a6812981039002030f90f9140"
integrity sha512-GFwhOQiWyECcndHvOTLYXpghHP+S9R58B7Ru1Y/74IJYpY0IIc2D0GOwEzKMWqhXHS1KedpymZGZfMqZDlyYiQ==
dependencies:
chalk "^1.1.3"
get-stdin "^5.0.1"
@@ -2754,6 +2754,13 @@ lodash@^4.17.13, lodash@^4.17.15, lodash@^4.17.4:
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==
lru-cache@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
dependencies:
yallist "^4.0.0"
make-dir@^3.0.0:
version "3.0.2"
resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.0.2.tgz#04a1acbf22221e1d6ef43559f43e05a90dbb4392"
@@ -2931,9 +2938,9 @@ node-modules-regexp@^1.0.0:
integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=
node-notifier@^8.0.0:
version "8.0.0"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.0.tgz#a7eee2d51da6d0f7ff5094bc7108c911240c1620"
integrity sha512-46z7DUmcjoYdaWyXouuFNNfUo6eFa94t23c53c+lG/9Cvauk4a98rAUp9672X5dxGdQmLpPzTxzu8f/OeEPaFA==
version "8.0.1"
resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-8.0.1.tgz#f86e89bbc925f2b068784b31f382afdc6ca56be1"
integrity sha512-BvEXF+UmsnAfYfoapKM9nGxnP+Wn7P91YfXmrKnfcYCx6VBeoN5Ez5Ogck6I8Bi5k4RlpqRYaw75pAwzX9OphA==
dependencies:
growly "^1.3.0"
is-wsl "^2.2.0"
@@ -3219,12 +3226,12 @@ punycode@^2.1.0, punycode@^2.1.1:
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
puppeteer@^5.0.0:
version "5.4.1"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.4.1.tgz#f2038eb23a0f593ed2cce0d6e7cd5c43aecd6756"
integrity sha512-8u6r9tFm3gtMylU4uCry1W/CeAA8uczKMONvGvivkTsGqKA7iB7DWO2CBFYlB9GY6/IEoq9vkI5slJWzUBkwNw==
version "5.5.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-5.5.0.tgz#331a7edd212ca06b4a556156435f58cbae08af00"
integrity sha512-OM8ZvTXAhfgFA7wBIIGlPQzvyEETzDjeRa4mZRCRHxYL+GNH5WAuYUQdja3rpWZvkX/JKqmuVgbsxDNsDFjMEg==
dependencies:
debug "^4.1.0"
devtools-protocol "0.0.809251"
devtools-protocol "0.0.818844"
extract-zip "^2.0.0"
https-proxy-agent "^4.0.0"
node-fetch "^2.6.1"
@@ -3485,9 +3492,11 @@ semver@^6.0.0, semver@^6.3.0:
integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==
semver@^7.3.2:
version "7.3.2"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938"
integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==
version "7.3.4"
resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.4.tgz#27aaa7d2e4ca76452f98d3add093a72c943edc97"
integrity sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==
dependencies:
lru-cache "^6.0.0"
set-blocking@^2.0.0:
version "2.0.0"
@@ -4019,9 +4028,9 @@ uuid@^3.3.2:
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
uuid@^8.3.0:
version "8.3.0"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea"
integrity sha512-fX6Z5o4m6XsXBdli9g7DtWgAx+osMsRRZFKma1mIUsLCz6vRvv+pz5VNbyu9UEDzpMWulZfvpgb/cmDXVulYFQ==
version "8.3.2"
resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
v8-to-istanbul@^7.0.0:
version "7.0.0"
@@ -4189,6 +4198,11 @@ y18n@^4.0.0:
resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b"
integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==
yallist@^4.0.0:
version "4.0.0"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
yargs-parser@^18.1.2:
version "18.1.3"
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
+3
View File
@@ -0,0 +1,3 @@
{
"include": ["./assets/**/*"]
}
+10 -7
View File
@@ -2,7 +2,6 @@ package main
import (
"context"
"net/http"
"net/url"
"os"
"os/signal"
@@ -10,6 +9,8 @@ import (
"time"
"github.com/amir20/dozzle/docker"
"github.com/amir20/dozzle/web"
"github.com/gobuffalo/packr"
log "github.com/sirupsen/logrus"
"github.com/spf13/pflag"
@@ -20,7 +21,6 @@ var (
addr = ""
base = ""
level = ""
showAll = false
tailSize = 300
filters map[string]string
version = "dev"
@@ -81,11 +81,14 @@ func main() {
}
box := packr.NewBox("./static")
r := createRoutes(base, &handler{
client: dockerClient,
box: box,
})
srv := &http.Server{Addr: addr, Handler: r}
config := web.Config{
Addr: addr,
Base: base,
Version: version,
TailSize: tailSize,
}
srv := web.CreateServer(dockerClient, box, config)
go func() {
log.Infof("Accepting connections on %s", srv.Addr)
+29 -33
View File
@@ -1,6 +1,6 @@
{
"name": "dozzle",
"version": "3.0.2",
"version": "3.2.2",
"description": "Realtime log viewer for docker containers. ",
"scripts": {
"prestart": "yarn clean",
@@ -8,13 +8,14 @@
"watch:assets": "webpack --mode=development --watch",
"watch:server": "reflex -c .reflex",
"dev": "npm-run-all -p dev-server watch:server",
"dev-server": "webpack serve",
"dev-server": "webpack serve --mode=development",
"prebuild": "yarn clean",
"build": "yarn webpack --mode=production",
"clean": "rm -rf static/ a_main-packr.go",
"release": "release-it",
"test": "TZ=UTC jest",
"integration": "docker-compose -f integration/docker-compose.test.yml up --build --force-recreate --exit-code-from integration"
"integration": "docker-compose -f integration/docker-compose.test.yml up --build --force-recreate --exit-code-from integration",
"postinstall": "husky install"
},
"repository": {
"type": "git",
@@ -31,57 +32,52 @@
"buefy": "^0.9.4",
"bulma": "^0.9.1",
"date-fns": "^2.16.1",
"dompurify": "^2.2.2",
"hotkeys-js": "^3.8.1",
"dompurify": "^2.2.6",
"hotkeys-js": "^3.8.2",
"lodash.debounce": "^4.0.8",
"lodash.throttle": "^4.1.1",
"semver": "^7.3.2",
"splitpanes": "^2.3.4",
"semver": "^7.3.4",
"splitpanes": "^2.3.6",
"store": "^2.0.12",
"vue": "^2.6.12",
"vue-meta": "^2.4.0",
"vue-router": "^3.4.9",
"vuex": "^3.5.1"
"vuex": "^3.6.0"
},
"devDependencies": {
"@babel/core": "^7.12.3",
"@babel/plugin-transform-runtime": "^7.12.1",
"@babel/core": "^7.12.10",
"@babel/plugin-transform-runtime": "^7.12.10",
"@vue/component-compiler-utils": "^3.2.0",
"@vue/test-utils": "^1.1.1",
"@vue/test-utils": "^1.1.2",
"autoprefixer": "^10.2.3",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^26.6.3",
"babel-preset-env": "^1.7.0",
"caniuse-lite": "^1.0.30001157",
"caniuse-lite": "^1.0.30001179",
"css-loader": "^5.0.1",
"eventsourcemock": "^2.0.0",
"html-webpack-plugin": "^4.5.0",
"husky": "^4.3.0",
"html-webpack-plugin": "^4.5.1",
"husky": "^5.0.6",
"jest": "^26.6.3",
"jest-serializer-vue": "^2.0.2",
"lint-staged": "^10.5.1",
"mini-css-extract-plugin": "^1.3.0",
"lint-staged": "^10.5.3",
"mini-css-extract-plugin": "^1.3.4",
"npm-run-all": "^4.1.5",
"postcss-cssnext": "^3.1.0",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"prettier": "^2.1.2",
"release-it": "^14.2.1",
"sass": "^1.29.0",
"sass-loader": "^10.0.5",
"postcss": "^8.2.4",
"postcss-loader": "^4.2.0",
"prettier": "^2.2.1",
"release-it": "^14.2.2",
"sass": "^1.32.5",
"sass-loader": "^10.1.1",
"vue-hot-reload-api": "^2.3.4",
"vue-jest": "^3.0.7",
"vue-loader": "^15.9.5",
"vue-loader": "^15.9.6",
"vue-style-loader": "^4.1.2",
"vue-template-compiler": "^2.6.12",
"webpack": "^5.4.0",
"webpack-cli": "^4.2.0",
"webpack-dev-server": "^3.11.0",
"webpack-pwa-manifest": "^4.2.0"
},
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
"webpack": "^5.16.0",
"webpack-cli": "^4.4.0",
"webpack-dev-server": "^3.11.2",
"webpack-pwa-manifest": "^4.3.0"
},
"lint-staged": {
"*.{js,vue,css}": [
-274
View File
@@ -1,274 +0,0 @@
package main
import (
"encoding/json"
"fmt"
"html/template"
"io"
"net/http"
"runtime"
"strings"
"sync"
"time"
"github.com/amir20/dozzle/docker"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
)
func createRoutes(base string, h *handler) *mux.Router {
r := mux.NewRouter()
r.Use(setCSPHeaders)
if base != "/" {
r.HandleFunc(base, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
http.Redirect(w, req, base+"/", http.StatusMovedPermanently)
}))
}
s := r.PathPrefix(base).Subrouter()
s.HandleFunc("/api/logs/stream", h.streamLogs)
s.HandleFunc("/api/logs", h.fetchLogsBetweenDates)
s.HandleFunc("/api/events/stream", h.streamEvents)
s.HandleFunc("/version", h.version)
s.PathPrefix("/").Handler(http.StripPrefix(base, http.HandlerFunc(h.index)))
return r
}
func setCSPHeaders(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Security-Policy", "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'")
next.ServeHTTP(w, r)
})
}
func (h *handler) index(w http.ResponseWriter, req *http.Request) {
fileServer := http.FileServer(h.box)
if h.box.Has(req.URL.Path) && req.URL.Path != "" && req.URL.Path != "/" {
fileServer.ServeHTTP(w, req)
} else {
text, err := h.box.FindString("index.html")
if err != nil {
panic(err)
}
tmpl, err := template.New("index.html").Parse(text)
if err != nil {
panic(err)
}
path := ""
if base != "/" {
path = base
}
data := struct {
Base string
Version string
}{path, version}
err = tmpl.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=UTF-8")
from, _ := time.Parse(time.RFC3339, r.URL.Query().Get("from"))
to, _ := time.Parse(time.RFC3339, r.URL.Query().Get("to"))
id := r.URL.Query().Get("id")
messages, _ := h.client.ContainerLogsBetweenDates(r.Context(), id, from, to)
for _, m := range messages {
fmt.Fprintln(w, m)
}
}
func (h *handler) streamLogs(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
if id == "" {
http.Error(w, "id is required", http.StatusBadRequest)
return
}
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
container, e := h.client.FindContainer(id)
if e != nil {
http.Error(w, e.Error(), http.StatusNotFound)
return
}
messages, err := h.client.ContainerLogs(r.Context(), container.ID, tailSize, r.Header.Get("Last-Event-ID"))
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
fmt.Fprintf(w, "event: container-stopped\ndata: end of stream\n\n")
break Loop
}
fmt.Fprintf(w, "data: %s\n", message)
if index := strings.IndexAny(message, " "); index != -1 {
id := message[:index]
if _, err := time.Parse(time.RFC3339Nano, id); err == nil {
fmt.Fprintf(w, "id: %s\n", id)
}
}
fmt.Fprintf(w, "\n")
f.Flush()
case e := <-err:
if e == io.EOF {
log.Debugf("Container stopped: %v", container.ID)
fmt.Fprintf(w, "event: container-stopped\ndata: end of stream\n\n")
f.Flush()
} else {
log.Debugf("Error while reading from log stream: %v", e)
break Loop
}
}
}
log.WithField("NumGoroutine", runtime.NumGoroutine()).Debug("runtime stats")
}
func (h *handler) streamEvents(w http.ResponseWriter, r *http.Request) {
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
ctx := r.Context()
messages, err := h.client.Events(ctx)
stats := make(chan docker.ContainerStat)
runningContainers := map[string]docker.Container{}
if containers, err := h.client.ListContainers(); err == nil {
for _, c := range containers {
if c.State == "running" {
h.client.ContainerStats(ctx, c.ID, stats)
runningContainers[c.ID] = c
}
}
}
if err := sendContainersJSON(h.client, w); err != nil {
log.Errorf("Error while encoding containers to stream: %v", err)
}
f.Flush()
delayer := delayedFunc(time.Second)
Loop:
for {
select {
case stat := <-stats:
bytes, _ := json.Marshal(stat)
_, err := fmt.Fprintf(w, "event: container-stat\ndata: %s\n\n", string(bytes))
if err != nil {
log.Debugf("Error while writing to event stream: %v", err)
break
}
f.Flush()
case message, ok := <-messages:
if !ok {
break Loop
}
switch message.Action {
case "start", "connect", "disconnect", "die":
log.Debugf("Triggering docker event: %v", message.Action)
if message.Action == "start" {
log.Debugf("Scanning for new containers")
if containers, err := h.client.ListContainers(); err == nil {
for _, c := range containers {
if _, ok = runningContainers[c.ID]; c.State == "running" && !ok {
log.Debugf("Found a new container %v", c.ID)
h.client.ContainerStats(ctx, c.ID, stats)
runningContainers[c.ID] = c
}
}
}
}
delayer(func() {
if err := sendContainersJSON(h.client, w); err != nil {
log.Errorf("Error while encoding containers to stream: %v", err)
}
})
f.Flush()
default:
log.Debugf("Ignoring docker event: %v", message.Action)
}
case <-ctx.Done():
break Loop
case <-err:
break Loop
}
}
}
func (h *handler) version(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, version)
}
func sendContainersJSON(client docker.Client, w http.ResponseWriter) error {
if containers, err := client.ListContainers(); err != nil {
return err
} else {
if _, err := fmt.Fprint(w, "event: containers-changed\ndata: "); err != nil {
return err
}
if err := json.NewEncoder(w).Encode(containers); err != nil {
return err
}
if _, err := fmt.Fprint(w, "\n\n"); err != nil {
return err
}
}
return nil
}
type delayedFun struct {
mu sync.Mutex
after time.Duration
timer *time.Timer
}
func delayedFunc(after time.Duration) func(f func()) {
d := &delayedFun{after: after}
return func(f func()) {
d.add(f)
}
}
func (d *delayedFun) add(f func()) {
d.mu.Lock()
defer d.mu.Unlock()
if d.timer != nil {
d.timer.Stop()
}
d.timer = time.AfterFunc(d.after, f)
}
@@ -64,6 +64,14 @@ X-Accel-Buffering: no
event: containers-changed
data: []
event: containers-changed
data: []
event: container-start
data: {"actorId":"1234","name":"start"}
/* snapshot: Test_handler_streamLogs_error_finding_container */
HTTP/1.1 404 Not Found
Connection: close
@@ -73,12 +81,15 @@ X-Content-Type-Options: nosniff
error finding container
/* snapshot: Test_handler_streamLogs_error_reading */
HTTP/1.1 200 OK
HTTP/1.1 500 Internal Server Error
Connection: close
Cache-Control: no-cache
Connection: keep-alive
Content-Type: text/event-stream
X-Accel-Buffering: no
Content-Type: text/plain; charset=utf-8
X-Accel-Buffering: no
X-Content-Type-Options: nosniff
test error
/* snapshot: Test_handler_streamLogs_happy */
HTTP/1.1 200 OK
@@ -104,9 +115,6 @@ X-Accel-Buffering: no
event: container-stopped
data: end of stream
event: container-stopped
data: end of stream
/* snapshot: Test_handler_streamLogs_happy_with_id */
HTTP/1.1 200 OK
Connection: close
+331
View File
@@ -0,0 +1,331 @@
package web
import (
"bufio"
"compress/gzip"
"context"
"encoding/json"
"fmt"
"html/template"
"io"
"net/http"
_ "net/http/pprof"
"runtime"
"strings"
"time"
"github.com/amir20/dozzle/docker"
"github.com/dustin/go-humanize"
"github.com/gobuffalo/packr"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
)
// Config is a struct for configuring the web service
type Config struct {
Base string
Addr string
Version string
TailSize int
}
type handler struct {
client docker.Client
box packr.Box
config *Config
}
// CreateServer creates a service for http handler
func CreateServer(c docker.Client, b packr.Box, config Config) *http.Server {
handler := &handler{
client: c,
box: b,
config: &config,
}
return &http.Server{Addr: config.Addr, Handler: createRouter(handler)}
}
func createRouter(h *handler) *mux.Router {
base := h.config.Base
r := mux.NewRouter()
r.Use(setCSPHeaders)
if base != "/" {
r.HandleFunc(base, http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) {
http.Redirect(w, req, base+"/", http.StatusMovedPermanently)
}))
}
s := r.PathPrefix(base).Subrouter()
s.HandleFunc("/api/logs/stream", h.streamLogs)
s.HandleFunc("/api/logs/download", h.downloadLogs)
s.HandleFunc("/api/logs", h.fetchLogsBetweenDates)
s.HandleFunc("/api/events/stream", h.streamEvents)
s.HandleFunc("/version", h.version)
if log.IsLevelEnabled(log.DebugLevel) {
s.PathPrefix("/debug/pprof/").Handler(http.DefaultServeMux)
}
s.PathPrefix("/").Handler(http.StripPrefix(base, http.HandlerFunc(h.index)))
return r
}
func setCSPHeaders(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Security-Policy", "default-src 'none'; script-src 'self'; style-src 'self' 'unsafe-inline' fonts.googleapis.com; img-src 'self'; manifest-src 'self'; font-src fonts.gstatic.com; connect-src 'self' api.github.com; require-trusted-types-for 'script'")
next.ServeHTTP(w, r)
})
}
func (h *handler) index(w http.ResponseWriter, req *http.Request) {
fileServer := http.FileServer(h.box)
if h.box.Has(req.URL.Path) && req.URL.Path != "" && req.URL.Path != "/" {
fileServer.ServeHTTP(w, req)
} else {
text, err := h.box.FindString("index.html")
if err != nil {
panic(err)
}
tmpl, err := template.New("index.html").Parse(text)
if err != nil {
panic(err)
}
path := ""
if h.config.Base != "/" {
path = h.config.Base
}
data := struct {
Base string
Version string
}{path, h.config.Version}
err = tmpl.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func (h *handler) fetchLogsBetweenDates(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=UTF-8")
from, _ := time.Parse(time.RFC3339, r.URL.Query().Get("from"))
to, _ := time.Parse(time.RFC3339, r.URL.Query().Get("to"))
id := r.URL.Query().Get("id")
reader, err := h.client.ContainerLogsBetweenDates(r.Context(), id, from, to)
defer reader.Close()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
io.Copy(w, reader)
}
func (h *handler) downloadLogs(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
container, err := h.client.FindContainer(id)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
now := time.Now()
from := time.Unix(container.Created, 0)
w.Header().Set("Content-Disposition", fmt.Sprintf("attachment; filename=%v.log.gz", container.ID))
w.Header().Set("Content-Type", "application/gzip")
zw := gzip.NewWriter(w)
defer zw.Close()
zw.Name = fmt.Sprintf("%v.log", container.ID)
zw.Comment = "Logs generated by Dozzle"
zw.ModTime = now
reader, err := h.client.ContainerLogsBetweenDates(r.Context(), container.ID, from, now)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
io.Copy(zw, reader)
}
func (h *handler) streamLogs(w http.ResponseWriter, r *http.Request) {
id := r.URL.Query().Get("id")
if id == "" {
http.Error(w, "id is required", http.StatusBadRequest)
return
}
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
container, err := h.client.FindContainer(id)
if err != nil {
http.Error(w, err.Error(), http.StatusNotFound)
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
reader, err := h.client.ContainerLogs(r.Context(), container.ID, h.config.TailSize, r.Header.Get("Last-Event-ID"))
if err != nil {
if err == io.EOF {
fmt.Fprintf(w, "event: container-stopped\ndata: end of stream\n\n")
f.Flush()
} else {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
return
}
defer reader.Close()
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
message := scanner.Text()
fmt.Fprintf(w, "data: %s\n", message)
if index := strings.IndexAny(message, " "); index != -1 {
id := message[:index]
if _, err := time.Parse(time.RFC3339Nano, id); err == nil {
fmt.Fprintf(w, "id: %s\n", id)
}
}
fmt.Fprintf(w, "\n")
f.Flush()
}
log.Debugf("streaming stopped: %v", container.ID)
if scanner.Err() == nil {
log.Debugf("container stopped: %v", container.ID)
fmt.Fprintf(w, "event: container-stopped\ndata: end of stream\n\n")
f.Flush()
} else if scanner.Err() != context.Canceled {
log.Errorf("unknown error while streaming %v", scanner.Err())
}
log.WithField("routines", runtime.NumGoroutine()).Debug("runtime goroutine stats")
if log.IsLevelEnabled(log.DebugLevel) {
var m runtime.MemStats
runtime.ReadMemStats(&m)
// For info on each, see: https://golang.org/pkg/runtime/#MemStats
log.WithFields(log.Fields{
"allocated": humanize.Bytes(m.Alloc),
"totalAllocated": humanize.Bytes(m.TotalAlloc),
"system": humanize.Bytes(m.Sys),
}).Debug("runtime mem stats")
}
}
func (h *handler) streamEvents(w http.ResponseWriter, r *http.Request) {
f, ok := w.(http.Flusher)
if !ok {
http.Error(w, "Streaming unsupported!", http.StatusInternalServerError)
return
}
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("X-Accel-Buffering", "no")
ctx := r.Context()
events, err := h.client.Events(ctx)
stats := make(chan docker.ContainerStat)
if containers, err := h.client.ListContainers(); err == nil {
for _, c := range containers {
if c.State == "running" {
if err := h.client.ContainerStats(ctx, c.ID, stats); err != nil {
log.Errorf("error while streaming container stats: %v", err)
}
}
}
}
if err := sendContainersJSON(h.client, w); err != nil {
log.Errorf("error while encoding containers to stream: %v", err)
}
f.Flush()
for {
select {
case stat := <-stats:
bytes, _ := json.Marshal(stat)
if _, err := fmt.Fprintf(w, "event: container-stat\ndata: %s\n\n", string(bytes)); err != nil {
log.Errorf("error writing stat to event stream: %v", err)
return
}
f.Flush()
case event, ok := <-events:
if !ok {
return
}
switch event.Name {
case "start", "die":
log.Debugf("triggering docker event: %v", event.Name)
if event.Name == "start" {
log.Debugf("found new container with id: %v", event.ActorID)
if err := h.client.ContainerStats(ctx, event.ActorID, stats); err != nil {
log.Errorf("error when streaming new container stats: %v", err)
}
if err := sendContainersJSON(h.client, w); err != nil {
log.Errorf("error encoding containers to stream: %v", err)
return
}
}
bytes, _ := json.Marshal(event)
if _, err := fmt.Fprintf(w, "event: container-%s\ndata: %s\n\n", event.Name, string(bytes)); err != nil {
log.Errorf("error writing event to event stream: %v", err)
return
}
f.Flush()
default:
// do nothing
}
case <-ctx.Done():
return
case <-err:
return
}
}
}
func (h *handler) version(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "%v", h.config.Version)
}
func sendContainersJSON(client docker.Client, w http.ResponseWriter) error {
containers, err := client.ListContainers()
if err != nil {
return err
}
if _, err := fmt.Fprint(w, "event: containers-changed\ndata: "); err != nil {
return err
}
if err := json.NewEncoder(w).Encode(containers); err != nil {
return err
}
if _, err := fmt.Fprint(w, "\n\n"); err != nil {
return err
}
return nil
}
+37 -77
View File
@@ -1,19 +1,20 @@
package main
package web
import (
"context"
"errors"
"io"
"io/ioutil"
"net/http"
"net/http/httptest"
"os"
"strings"
"testing"
"github.com/magiconair/properties/assert"
"github.com/amir20/dozzle/docker"
"github.com/beme/abide"
"github.com/docker/docker/api/types/events"
"github.com/gobuffalo/packr"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
@@ -26,39 +27,22 @@ type MockedClient struct {
func (m *MockedClient) FindContainer(id string) (docker.Container, error) {
args := m.Called(id)
container, ok := args.Get(0).(docker.Container)
if !ok {
panic("containers is not of type docker.Container")
}
return container, args.Error(1)
return args.Get(0).(docker.Container), args.Error(1)
}
func (m *MockedClient) ListContainers() ([]docker.Container, error) {
args := m.Called()
containers, ok := args.Get(0).([]docker.Container)
if !ok {
panic("containers is not of type []docker.Container")
}
return containers, args.Error(1)
return args.Get(0).([]docker.Container), args.Error(1)
}
func (m *MockedClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (<-chan string, <-chan error) {
func (m *MockedClient) ContainerLogs(ctx context.Context, id string, tailSize int, since string) (io.ReadCloser, error) {
args := m.Called(ctx, id, tailSize)
channel, ok := args.Get(0).(chan string)
if !ok {
panic("channel is not of type chan string")
}
err, ok := args.Get(1).(chan error)
if !ok {
panic("error is not of type chan error")
}
return channel, err
return args.Get(0).(io.ReadCloser), args.Error(1)
}
func (m *MockedClient) Events(ctx context.Context) (<-chan events.Message, <-chan error) {
func (m *MockedClient) Events(ctx context.Context) (<-chan docker.ContainerEvent, <-chan error) {
args := m.Called(ctx)
channel, ok := args.Get(0).(chan events.Message)
channel, ok := args.Get(0).(chan docker.ContainerEvent)
if !ok {
panic("channel is not of type chan events.Message")
}
@@ -83,17 +67,11 @@ func Test_handler_streamLogs_happy(t *testing.T) {
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
reader := ioutil.NopCloser(strings.NewReader("INFO Testing logs..."))
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, mock.Anything, 300).Return(messages, errChannel)
go func() {
messages <- "INFO Testing logs..."
close(messages)
}()
mockedClient.On("ContainerLogs", mock.Anything, mock.Anything, 300).Return(reader, nil)
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -110,17 +88,11 @@ func Test_handler_streamLogs_happy_with_id(t *testing.T) {
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
reader := ioutil.NopCloser(strings.NewReader("2020-05-13T18:55:37.772853839Z INFO Testing logs..."))
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, mock.Anything, 300).Return(messages, errChannel)
go func() {
messages <- "2020-05-13T18:55:37.772853839Z INFO Testing logs..."
close(messages)
}()
mockedClient.On("ContainerLogs", mock.Anything, mock.Anything, 300).Return(reader, nil)
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -137,17 +109,10 @@ func Test_handler_streamLogs_happy_container_stopped(t *testing.T) {
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(messages, errChannel)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(ioutil.NopCloser(strings.NewReader("")), io.EOF)
go func() {
errChannel <- io.EOF
close(messages)
}()
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -166,7 +131,7 @@ func Test_handler_streamLogs_error_finding_container(t *testing.T) {
mockedClient := new(MockedClient)
mockedClient.On("FindContainer", id).Return(docker.Container{}, errors.New("error finding container"))
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -183,17 +148,10 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(messages, errChannel)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(ioutil.NopCloser(strings.NewReader("")), errors.New("test error"))
go func() {
errChannel <- errors.New("test error")
close(messages)
}()
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -205,22 +163,24 @@ func Test_handler_streamEvents_happy(t *testing.T) {
req, err := http.NewRequest("GET", "/api/events/stream", nil)
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan events.Message)
messages := make(chan docker.ContainerEvent)
errChannel := make(chan error)
mockedClient.On("Events", mock.Anything).Return(messages, errChannel)
mockedClient.On("ListContainers").Return([]docker.Container{}, nil)
go func() {
messages <- events.Message{
Action: "start",
messages <- docker.ContainerEvent{
Name: "start",
ActorID: "1234",
}
messages <- events.Message{
Action: "something-random",
messages <- docker.ContainerEvent{
Name: "something-random",
ActorID: "1234",
}
close(messages)
}()
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -232,7 +192,7 @@ func Test_handler_streamEvents_error(t *testing.T) {
req, err := http.NewRequest("GET", "/api/events/stream", nil)
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
messages := make(chan events.Message)
messages := make(chan docker.ContainerEvent)
errChannel := make(chan error)
mockedClient.On("Events", mock.Anything).Return(messages, errChannel)
mockedClient.On("ListContainers").Return([]docker.Container{}, nil)
@@ -242,7 +202,7 @@ func Test_handler_streamEvents_error(t *testing.T) {
close(messages)
}()
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -256,7 +216,7 @@ func Test_handler_streamEvents_error_request(t *testing.T) {
mockedClient := new(MockedClient)
messages := make(chan events.Message)
messages := make(chan docker.ContainerEvent)
errChannel := make(chan error)
mockedClient.On("Events", mock.Anything).Return(messages, errChannel)
mockedClient.On("ListContainers").Return([]docker.Container{}, nil)
@@ -268,7 +228,7 @@ func Test_handler_streamEvents_error_request(t *testing.T) {
cancel()
}()
h := handler{client: mockedClient}
h := handler{client: mockedClient, config: &Config{TailSize: 300}}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
@@ -281,7 +241,7 @@ func Test_createRoutes_index(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "index page"), "AddString should have no error.")
handler := createRoutes("/", &handler{mockedClient, box})
handler := createRouter(&handler{mockedClient, box, &Config{Base: "/"}})
req, err := http.NewRequest("GET", "/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -294,7 +254,7 @@ func Test_createRoutes_redirect(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/foobar", &handler{mockedClient, box})
handler := createRouter(&handler{mockedClient, box, &Config{Base: "/foobar"}})
req, err := http.NewRequest("GET", "/foobar", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -308,7 +268,7 @@ func Test_createRoutes_foobar(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "foo page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, box})
handler := createRouter(&handler{mockedClient, box, &Config{Base: "/foobar"}})
req, err := http.NewRequest("GET", "/foobar/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -322,7 +282,7 @@ func Test_createRoutes_foobar_file(t *testing.T) {
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("/test", "test page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, box})
handler := createRouter(&handler{mockedClient, box, &Config{Base: "/foobar"}})
req, err := http.NewRequest("GET", "/foobar/test", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
@@ -335,7 +295,7 @@ func Test_createRoutes_version(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/", &handler{mockedClient, box})
handler := createRouter(&handler{mockedClient, box, &Config{Base: "/", Version: "dev"}})
req, err := http.NewRequest("GET", "/version", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
+3 -8
View File
@@ -33,14 +33,9 @@ module.exports = (env, argv) => ({
{
loader: "postcss-loader",
options: {
ident: "postcss",
plugins: (loader) => [
require("postcss-cssnext")({
features: {
customProperties: { warnings: false },
},
}),
],
postcssOptions: {
plugins: [require("autoprefixer")],
},
},
},
"sass-loader",
+785 -1341
View File
File diff suppressed because it is too large Load Diff