Compare commits

...

625 Commits

Author SHA1 Message Date
Amir Raminfar
d9642eec3f Release 1.22.5 2020-04-27 15:07:21 -07:00
Amir Raminfar
d277b4e878 Fixes bad date 2020-04-27 15:07:04 -07:00
Amir Raminfar
e84c9c874b Adds relative date debug console 2020-04-27 14:50:50 -07:00
Amir Raminfar
682822eef7 Adds debug mode 2020-04-27 14:35:56 -07:00
Amir Raminfar
9fcbcadba7 Release 1.22.4 2020-04-27 12:44:05 -07:00
Amir Raminfar
198ba36dbd Fixes user/pass 2020-04-27 12:36:50 -07:00
Amir Raminfar
3a48f9f194 Adds latest docker 2020-04-27 12:35:20 -07:00
Amir Raminfar
df0b584c8e Fixes key 2020-04-27 12:14:12 -07:00
Raphael Piccolo
d794ca1c7f support more timestamp formats (#405) 2020-04-27 12:03:51 -07:00
dependabot-preview[bot]
00c143a8c8 Merge pull request #404 from amir20/dependabot/npm_and_yarn/release-it-13.5.6 2020-04-27 18:20:39 +00:00
dependabot-preview[bot]
c2d8f330af Bump release-it from 13.5.5 to 13.5.6
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.5 to 13.5.6.
- [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/13.5.5...13.5.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-27 18:15:28 +00:00
dependabot-preview[bot]
c5d89dc981 Merge pull request #402 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001048 2020-04-25 17:42:52 +00:00
dependabot-preview[bot]
784bc40e76 Bump caniuse-lite from 1.0.30001047 to 1.0.30001048
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001047 to 1.0.30001048.
- [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.30001047...v1.0.30001048)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 17:37:09 +00:00
dependabot-preview[bot]
74e13abded Merge pull request #401 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001047 2020-04-25 16:45:12 +00:00
dependabot-preview[bot]
2519bf2815 Bump caniuse-lite from 1.0.30001046 to 1.0.30001047
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001046 to 1.0.30001047.
- [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.30001046...v1.0.30001047)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 16:39:51 +00:00
dependabot-preview[bot]
7b0477755d Merge pull request #400 from amir20/dependabot/npm_and_yarn/buefy-0.8.17 2020-04-25 16:02:45 +00:00
dependabot-preview[bot]
a6cec39b16 Bump buefy from 0.8.16 to 0.8.17
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.16 to 0.8.17.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.16...v0.8.17)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 15:56:41 +00:00
dependabot-preview[bot]
277648b4ff Merge pull request #399 from amir20/dependabot/npm_and_yarn/vuex-3.3.0 2020-04-25 06:18:44 +00:00
dependabot-preview[bot]
b76f0aa3f8 Bump vuex from 3.2.0 to 3.3.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.2.0 to 3.3.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.2.0...v3.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 06:13:16 +00:00
dependabot-preview[bot]
5a35458586 Merge pull request #398 from amir20/dependabot/npm_and_yarn/concurrently-5.2.0 2020-04-25 04:19:45 +00:00
dependabot-preview[bot]
fb0bec2950 Bump concurrently from 5.1.0 to 5.2.0
Bumps [concurrently](https://github.com/kimmobrunfeldt/concurrently) from 5.1.0 to 5.2.0.
- [Release notes](https://github.com/kimmobrunfeldt/concurrently/releases)
- [Commits](https://github.com/kimmobrunfeldt/concurrently/compare/v5.1.0...v5.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-25 04:14:13 +00:00
dependabot-preview[bot]
7af36da76e Merge pull request #397 from amir20/dependabot/npm_and_yarn/sass-1.26.5 2020-04-24 03:08:43 +00:00
dependabot-preview[bot]
4017da77fb Bump sass from 1.26.3 to 1.26.5
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.3 to 1.26.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.26.3...1.26.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-24 03:02:27 +00:00
Amir Raminfar
6f336bbcae Verifies go mod 2020-04-23 13:55:40 -07:00
dependabot-preview[bot]
6db4c9ba65 Merge pull request #395 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001046 2020-04-23 10:40:07 +00:00
dependabot-preview[bot]
8fb35f9ff6 Bump caniuse-lite from 1.0.30001045 to 1.0.30001046
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001045 to 1.0.30001046.
- [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.30001045...v1.0.30001046)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-23 10:34:44 +00:00
dependabot-preview[bot]
e41e34d45c Merge pull request #394 from amir20/dependabot/npm_and_yarn/buefy-0.8.16 2020-04-22 21:57:34 +00:00
dependabot-preview[bot]
cb82e5d221 Bump buefy from 0.8.15 to 0.8.16
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.15 to 0.8.16.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.15...v0.8.16)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-22 21:52:26 +00:00
dependabot-preview[bot]
23aba02e41 Merge pull request #393 from amir20/dependabot/npm_and_yarn/prettier-2.0.5 2020-04-21 17:28:01 +00:00
dependabot-preview[bot]
c281818579 Bump prettier from 2.0.4 to 2.0.5
Bumps [prettier](https://github.com/prettier/prettier) from 2.0.4 to 2.0.5.
- [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.0.4...2.0.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 17:22:16 +00:00
Amir Raminfar
42a8a9af80 Moves demo 2020-04-21 10:14:53 -07:00
Amir Raminfar
33e86ac18e Moves demo 2020-04-21 10:14:30 -07:00
dependabot-preview[bot]
b4dae48a5e Merge pull request #392 from amir20/dependabot/npm_and_yarn/release-it-13.5.5 2020-04-21 16:44:55 +00:00
dependabot-preview[bot]
8b9704bc69 Bump release-it from 13.5.4 to 13.5.5
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.4 to 13.5.5.
- [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/13.5.4...13.5.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 16:23:50 +00:00
dependabot-preview[bot]
def504ca04 Merge pull request #391 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.7 2020-04-21 15:12:33 +00:00
dependabot-preview[bot]
451dbefc93 Bump lint-staged from 10.1.6 to 10.1.7
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.6 to 10.1.7.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.6...v10.1.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 15:07:48 +00:00
dependabot-preview[bot]
1e35ffb1fe Merge pull request #390 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001045 2020-04-21 10:46:33 +00:00
dependabot-preview[bot]
570b0246b7 Bump caniuse-lite from 1.0.30001043 to 1.0.30001045
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001043 to 1.0.30001045.
- [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.30001043...v1.0.30001045)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-21 10:41:55 +00:00
dependabot-preview[bot]
b91360220c Merge pull request #389 from amir20/dependabot/npm_and_yarn/integration/jest-25.4.0 2020-04-20 13:50:18 +00:00
dependabot-preview[bot]
1c82ba87ba Bump jest from 25.3.0 to 25.4.0 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.3.0...v25.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 13:44:57 +00:00
dependabot-preview[bot]
14e64b8460 Merge pull request #388 from amir20/dependabot/npm_and_yarn/integration/jest-image-snapshot-3.1.0 2020-04-20 13:43:19 +00:00
dependabot-preview[bot]
314549c038 Bump jest-image-snapshot from 3.0.1 to 3.1.0 in /integration
Bumps [jest-image-snapshot](https://github.com/americanexpress/jest-image-snapshot) from 3.0.1 to 3.1.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/v3.0.1...v3.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-20 13:38:00 +00:00
Amir Raminfar
df059f7e63 Adds missing routes 2020-04-19 17:11:43 -07:00
Amir Raminfar
2a620d8c6e Moves routes to own file 2020-04-19 17:05:21 -07:00
dependabot-preview[bot]
ba0de92f84 Merge pull request #386 from amir20/dependabot/npm_and_yarn/jest-25.4.0 2020-04-19 22:49:40 +00:00
dependabot-preview[bot]
38fd3dd372 Bump jest from 25.3.0 to 25.4.0
Bumps [jest](https://github.com/facebook/jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.3.0...v25.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 22:44:21 +00:00
dependabot-preview[bot]
14b5eac802 Merge pull request #385 from amir20/dependabot/npm_and_yarn/babel-jest-25.4.0 2020-04-19 22:31:12 +00:00
dependabot-preview[bot]
25fc2710fc Bump babel-jest from 25.3.0 to 25.4.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.3.0 to 25.4.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.4.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 22:20:31 +00:00
dependabot-preview[bot]
54fff1e191 Merge pull request #384 from amir20/dependabot/npm_and_yarn/vuex-3.2.0 2020-04-19 11:21:41 +00:00
dependabot-preview[bot]
0f7a940e11 Bump vuex from 3.1.3 to 3.2.0
Bumps [vuex](https://github.com/vuejs/vuex) from 3.1.3 to 3.2.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.1.3...v3.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 11:16:01 +00:00
dependabot-preview[bot]
b53895dead Merge pull request #383 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.6 2020-04-19 09:58:01 +00:00
dependabot-preview[bot]
d0cb1cad44 Bump lint-staged from 10.1.5 to 10.1.6
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.5 to 10.1.6.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.5...v10.1.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 09:52:41 +00:00
dependabot-preview[bot]
ebdd78d6b0 Merge pull request #382 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001043 2020-04-19 04:48:14 +00:00
dependabot-preview[bot]
3f5be54938 Bump caniuse-lite from 1.0.30001042 to 1.0.30001043
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001042 to 1.0.30001043.
- [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.30001042...v1.0.30001043)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-19 04:42:24 +00:00
dependabot-preview[bot]
fca8ef26c5 Merge pull request #381 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.5 2020-04-18 08:28:05 +00:00
dependabot-preview[bot]
aa12682a42 Bump lint-staged from 10.1.4 to 10.1.5
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.4 to 10.1.5.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.4...v10.1.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-18 08:22:40 +00:00
dependabot-preview[bot]
bfa3714634 Merge pull request #380 from amir20/dependabot/npm_and_yarn/release-it-13.5.4 2020-04-17 15:37:53 +00:00
dependabot-preview[bot]
a7c3ee024b Bump release-it from 13.5.3 to 13.5.4
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.3 to 13.5.4.
- [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/13.5.3...13.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 15:32:42 +00:00
dependabot-preview[bot]
63eb64cbde Merge pull request #379 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.4 2020-04-17 14:17:01 +00:00
dependabot-preview[bot]
fd58b5c248 Bump lint-staged from 10.1.3 to 10.1.4
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.3 to 10.1.4.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.3...v10.1.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 14:11:01 +00:00
dependabot-preview[bot]
126d121e34 Merge pull request #378 from amir20/dependabot/npm_and_yarn/release-it-13.5.3 2020-04-17 14:08:36 +00:00
dependabot-preview[bot]
30331275f6 Bump release-it from 13.5.2 to 13.5.3
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.2 to 13.5.3.
- [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/13.5.2...13.5.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-17 14:02:06 +00:00
Amir Raminfar
8571dddd98 Release 1.22.3 2020-04-16 15:53:06 -07:00
Amir Raminfar
cf6f3945b5 Updates push.yml 2020-04-16 14:35:03 -07:00
Amir Raminfar
f644f7b9b3 Separates build in push.yml 2020-04-16 14:31:49 -07:00
Amir Raminfar
2e656e8882 Removes DOCKER_API_VERSION 2020-04-16 14:29:19 -07:00
Amir Raminfar
a277b7c00e Release 1.22.2 2020-04-16 14:24:43 -07:00
Amir Raminfar
26d7d1620e Sticky scroll (#377)
* Uses scroll-snap-type: y proximity to behave sticky when resizing windows

* Puts js back
2020-04-16 14:23:48 -07:00
Amir Raminfar
e7b65efc7a Uses client.WithAPIVersionNegotiation 2020-04-16 14:12:08 -07:00
dependabot-preview[bot]
3884eb9648 Merge pull request #376 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001042 2020-04-15 05:59:25 +00:00
dependabot-preview[bot]
c1a02644b6 Bump caniuse-lite from 1.0.30001041 to 1.0.30001042
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001041 to 1.0.30001042.
- [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.30001041...v1.0.30001042)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-15 05:54:10 +00:00
dependabot-preview[bot]
63135ded8a Merge pull request #375 from amir20/dependabot/npm_and_yarn/semver-7.3.2 2020-04-14 17:53:36 +00:00
dependabot-preview[bot]
ded48ab821 Bump semver from 7.3.1 to 7.3.2
Bumps [semver](https://github.com/npm/node-semver) from 7.3.1 to 7.3.2.
- [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.1...v7.3.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 17:47:41 +00:00
dependabot-preview[bot]
c014837e41 Merge pull request #374 from amir20/dependabot/npm_and_yarn/semver-7.3.1 2020-04-14 17:06:11 +00:00
dependabot-preview[bot]
c0768d7843 Bump semver from 7.3.0 to 7.3.1
Bumps [semver](https://github.com/npm/node-semver) from 7.3.0 to 7.3.1.
- [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.0...v7.3.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 17:00:10 +00:00
dependabot-preview[bot]
32a6fe1d91 Merge pull request #373 from amir20/dependabot/npm_and_yarn/semver-7.3.0 2020-04-14 01:19:05 +00:00
dependabot-preview[bot]
6187483bc2 Bump semver from 7.2.3 to 7.3.0
Bumps [semver](https://github.com/npm/node-semver) from 7.2.3 to 7.3.0.
- [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.2.3...v7.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-14 01:13:45 +00:00
dependabot-preview[bot]
59143841c9 Merge pull request #372 from amir20/dependabot/npm_and_yarn/semver-7.2.3 2020-04-13 18:41:27 +00:00
dependabot-preview[bot]
f9f22dbdf2 Bump semver from 7.2.2 to 7.2.3
Bumps [semver](https://github.com/npm/node-semver) from 7.2.2 to 7.2.3.
- [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.2.2...v7.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 18:35:32 +00:00
dependabot-preview[bot]
3da3a319af Merge pull request #371 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001041 2020-04-13 03:43:36 +00:00
dependabot-preview[bot]
2d5a9a2b42 Bump caniuse-lite from 1.0.30001040 to 1.0.30001041
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001040 to 1.0.30001041.
- [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.30001040...v1.0.30001041)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-13 03:38:11 +00:00
Amir Raminfar
50d34442b7 Release 1.22.1 2020-04-11 19:39:28 -07:00
Amir Raminfar
d52a4d86e9 Adds settings for timestamp. Fixes #360 (#370)
* Adds settings for timestamp. Fixes #360

* Fixes test

* Updates actions
2020-04-11 19:39:00 -07:00
dependabot-preview[bot]
0b18c00db3 Merge pull request #369 from amir20/dependabot/npm_and_yarn/bulma-0.8.2 2020-04-11 12:31:22 +00:00
dependabot-preview[bot]
561c8372da Bump bulma from 0.8.1 to 0.8.2
Bumps [bulma](https://github.com/jgthms/bulma) from 0.8.1 to 0.8.2.
- [Release notes](https://github.com/jgthms/bulma/releases)
- [Changelog](https://github.com/jgthms/bulma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jgthms/bulma/compare/0.8.1...0.8.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-11 12:25:54 +00:00
dependabot-preview[bot]
db32fa51aa Merge pull request #368 from amir20/dependabot/npm_and_yarn/semver-7.2.2 2020-04-10 16:10:58 +00:00
dependabot-preview[bot]
6a28fd9474 Bump semver from 7.2.1 to 7.2.2
Bumps [semver](https://github.com/npm/node-semver) from 7.2.1 to 7.2.2.
- [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.2.1...v7.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-10 16:05:32 +00:00
dependabot-preview[bot]
d52961e06e Merge pull request #367 from amir20/dependabot/go_modules/github.com/spf13/viper-1.6.3 2020-04-10 13:22:23 +00:00
dependabot-preview[bot]
969728eb69 Bump github.com/spf13/viper from 1.6.2 to 1.6.3
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.6.2 to 1.6.3.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.6.2...v1.6.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-10 13:17:38 +00:00
dependabot-preview[bot]
5001340f0d Merge pull request #366 from amir20/dependabot/npm_and_yarn/husky-4.2.5 2020-04-09 21:54:47 +00:00
dependabot-preview[bot]
7d21f2d5db Bump husky from 4.2.4 to 4.2.5
Bumps [husky](https://github.com/typicode/husky) from 4.2.4 to 4.2.5.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.4...v4.2.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 21:49:19 +00:00
Amir Raminfar
58613fe771 Release 1.22.0 2020-04-09 13:36:11 -07:00
Amir Raminfar
62ab55b1e4 Updates icons to use builtin SVGs instead for no external depend… (#354)
* Use iconmoon

* Adds icons

* Use go to update BASE

* Changes more icons

* Uses html inline

* Reverts css changes

* Fixes icons

* Fixes tests and icons

* Adds --rm to int tests

* Fixes unit tests
2020-04-09 11:06:04 -07:00
dependabot-preview[bot]
6dc0c93588 Merge pull request #365 from amir20/dependabot/npm_and_yarn/date-fns-2.12.0 2020-04-09 17:55:17 +00:00
dependabot-preview[bot]
84e24b9ec8 Bump date-fns from 2.11.1 to 2.12.0
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.11.1 to 2.12.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.11.1...v2.12.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 17:49:31 +00:00
dependabot-preview[bot]
f689e9c3d3 Merge pull request #364 from amir20/dependabot/npm_and_yarn/husky-4.2.4 2020-04-09 17:04:52 +00:00
dependabot-preview[bot]
054f1c616f Bump husky from 4.2.3 to 4.2.4
Bumps [husky](https://github.com/typicode/husky) from 4.2.3 to 4.2.4.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.3...v4.2.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 16:59:14 +00:00
dependabot-preview[bot]
8bfe5b5193 Merge pull request #363 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.3 2020-04-09 14:22:15 +00:00
dependabot-preview[bot]
120f70d39a Bump lint-staged from 10.1.2 to 10.1.3
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.2 to 10.1.3.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.2...v10.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 14:16:08 +00:00
dependabot-preview[bot]
66f5fcd06b Merge pull request #362 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001040 2020-04-09 09:58:17 +00:00
dependabot-preview[bot]
e934639220 Bump caniuse-lite from 1.0.30001039 to 1.0.30001040
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001039 to 1.0.30001040.
- [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.30001039...v1.0.30001040)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-09 09:53:08 +00:00
Amir Raminfar
52a8d6489d Removes lock 2020-04-08 11:55:37 -07:00
Amir Raminfar
4176202bcc Uses Yarn again with a timeout 2020-04-08 10:29:06 -07:00
dependabot-preview[bot]
09731be502 Merge pull request #359 from amir20/dependabot/npm_and_yarn/babel-jest-25.3.0 2020-04-08 14:30:56 +00:00
dependabot-preview[bot]
aea496422a Bump babel-jest from 25.2.6 to 25.3.0
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.2.6 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.3.0/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:25:56 +00:00
dependabot-preview[bot]
8970bb7db9 Merge pull request #358 from amir20/dependabot/npm_and_yarn/vue/component-compiler-utils-3.1.2 2020-04-08 14:24:31 +00:00
dependabot-preview[bot]
f4fbdaa42f Merge pull request #357 from amir20/dependabot/npm_and_yarn/jest-25.3.0 2020-04-08 14:23:48 +00:00
dependabot-preview[bot]
07330ecabe Bump @vue/component-compiler-utils from 3.1.1 to 3.1.2
Bumps [@vue/component-compiler-utils](https://github.com/vuejs/component-compiler-utils) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/vuejs/component-compiler-utils/releases)
- [Changelog](https://github.com/vuejs/component-compiler-utils/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/component-compiler-utils/compare/v3.1.1...v3.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:19:25 +00:00
dependabot-preview[bot]
c5a3e2a7e7 Bump jest from 25.2.7 to 25.3.0
Bumps [jest](https://github.com/facebook/jest) from 25.2.7 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.7...v25.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 14:18:47 +00:00
dependabot-preview[bot]
de0de15b5b Merge pull request #356 from amir20/dependabot/npm_and_yarn/integration/jest-25.3.0 2020-04-08 13:36:31 +00:00
dependabot-preview[bot]
b8bd70adc3 Bump jest from 25.2.7 to 25.3.0 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.2.7 to 25.3.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.7...v25.3.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 13:30:49 +00:00
dependabot-preview[bot]
ff11f8e0cc Merge pull request #355 from amir20/dependabot/npm_and_yarn/vue/test-utils-1.0.0-beta.33 2020-04-08 11:26:19 +00:00
dependabot-preview[bot]
7d118fd162 Bump @vue/test-utils from 1.0.0-beta.32 to 1.0.0-beta.33
Bumps [@vue/test-utils](https://github.com/vuejs/vue-test-utils/tree/HEAD/packages/test-utils) from 1.0.0-beta.32 to 1.0.0-beta.33.
- [Release notes](https://github.com/vuejs/vue-test-utils/releases)
- [Changelog](https://github.com/vuejs/vue-test-utils/blob/dev/packages/test-utils/CHANGELOG.md)
- [Commits](https://github.com/vuejs/vue-test-utils/commits/v1.0.0-beta.33/packages/test-utils)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-08 11:20:40 +00:00
Amir Raminfar
6a01e0ca16 Release 1.21.9 2020-04-07 15:33:47 -07:00
Amir Raminfar
12ec8189f3 Tries to fix build 2020-04-07 15:28:34 -07:00
Amir Raminfar
9b62073ce6 Release 1.21.8 2020-04-07 14:36:27 -07:00
Amir Raminfar
579df88946 Uses v-if (#353) 2020-04-07 14:36:03 -07:00
Amir Raminfar
3f27e988ed More int tests (#352)
* Adds more tests

* Uses yarn
2020-04-07 14:06:42 -07:00
dependabot-preview[bot]
e5a40d4f5f Merge pull request #351 from amir20/dependabot/npm_and_yarn/release-it-13.5.2 2020-04-07 14:57:26 +00:00
dependabot-preview[bot]
2e86873908 Bump release-it from 13.5.1 to 13.5.2
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.1 to 13.5.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/13.5.1...13.5.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-07 14:52:32 +00:00
dependabot-preview[bot]
90fefe660a Merge pull request #350 from amir20/dependabot/npm_and_yarn/semver-7.2.1 2020-04-06 23:45:52 +00:00
dependabot-preview[bot]
b0c2b60ecf Bump semver from 7.1.3 to 7.2.1
Bumps [semver](https://github.com/npm/node-semver) from 7.1.3 to 7.2.1.
- [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.1.3...v7.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-06 23:40:04 +00:00
dependabot-preview[bot]
0a49f55ebe Merge pull request #349 from amir20/dependabot/npm_and_yarn/integration/jest-25.2.7 2020-04-06 19:19:27 +00:00
dependabot-preview[bot]
fc25775754 Bump jest from 25.2.6 to 25.2.7 in /integration
Bumps [jest](https://github.com/facebook/jest) from 25.2.6 to 25.2.7.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.6...v25.2.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-06 17:59:53 +00:00
Amir Raminfar
07dc02403d Removes automerge 2020-04-06 10:57:04 -07:00
github-actions[bot]
2b9bba4ba0 Merge pull request #348 from amir20/dependabot/npm_and_yarn/prettier-2.0.4
Bump prettier from 2.0.3 to 2.0.4
2020-04-06 15:54:37 +00:00
dependabot-preview[bot]
fdec2c3d71 Bump prettier from 2.0.3 to 2.0.4
Bumps [prettier](https://github.com/prettier/prettier) from 2.0.3 to 2.0.4.
- [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.0.3...2.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-06 15:54:03 +00:00
github-actions[bot]
e8ec89f99a Merge pull request #346 from amir20/dependabot/npm_and_yarn/prettier-2.0.3
Bump prettier from 2.0.2 to 2.0.3
2020-04-05 21:26:15 +00:00
dependabot-preview[bot]
3899ecda5a Bump prettier from 2.0.2 to 2.0.3
Bumps [prettier](https://github.com/prettier/prettier) from 2.0.2 to 2.0.3.
- [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.0.2...2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-05 21:25:45 +00:00
github-actions[bot]
495b97d655 Merge pull request #345 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.2
Bump lint-staged from 10.1.1 to 10.1.2
2020-04-05 09:31:21 +00:00
dependabot-preview[bot]
c91e63ee4c Bump lint-staged from 10.1.1 to 10.1.2
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.1 to 10.1.2.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.1...v10.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-05 09:30:52 +00:00
Amir Raminfar
466b47c623 Uses runtime vuejs 2020-04-04 09:04:41 -07:00
github-actions[bot]
23430d9cdf Merge pull request #344 from amir20/dependabot/npm_and_yarn/caniuse-lite-1.0.30001039
Bump caniuse-lite from 1.0.30001038 to 1.0.30001039
2020-04-04 04:37:21 +00:00
dependabot-preview[bot]
1b9d35fa12 Bump caniuse-lite from 1.0.30001038 to 1.0.30001039
Bumps [caniuse-lite](https://github.com/ben-eb/caniuse-lite) from 1.0.30001038 to 1.0.30001039.
- [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.30001038...v1.0.30001039)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-04 04:36:52 +00:00
Amir Raminfar
4589399ecf Uses 2 idle 2020-04-03 16:33:36 -07:00
Amir Raminfar
73a8cd32cf Fixes int tests 2020-04-03 15:52:35 -07:00
Amir Raminfar
f808926dbb Ignore int tests 2020-04-03 15:01:55 -07:00
Amir Raminfar
27f20a3d78 Adds integeration tests 2020-04-03 14:53:53 -07:00
Amir Raminfar
4fdd851242 Adds integeration 2020-04-03 14:53:53 -07:00
github-actions[bot]
62898eae41 Merge pull request #343 from amir20/dependabot/npm_and_yarn/jest-25.2.7
Bump jest from 25.2.6 to 25.2.7
2020-04-03 11:41:06 +00:00
dependabot-preview[bot]
91b779db43 Bump jest from 25.2.6 to 25.2.7
Bumps [jest](https://github.com/facebook/jest) from 25.2.6 to 25.2.7.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.6...v25.2.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-03 11:40:35 +00:00
github-actions[bot]
f6a934e013 Merge pull request #341 from amir20/dependabot/npm_and_yarn/jest-25.2.6
Bump jest from 25.2.4 to 25.2.6
2020-04-02 12:57:18 +00:00
dependabot-preview[bot]
42d53004eb Bump jest from 25.2.4 to 25.2.6
Bumps [jest](https://github.com/facebook/jest) from 25.2.4 to 25.2.6.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.4...v25.2.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-02 12:56:47 +00:00
github-actions[bot]
66310ffd8a Merge pull request #340 from amir20/dependabot/npm_and_yarn/babel-jest-25.2.6
Bump babel-jest from 25.2.4 to 25.2.6
2020-04-02 12:46:08 +00:00
dependabot-preview[bot]
4578e6c895 Bump babel-jest from 25.2.4 to 25.2.6
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.2.4 to 25.2.6.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.2.6/packages/babel-jest)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-04-02 12:45:37 +00:00
github-actions[bot]
8bfff2c601 Merge pull request #339 from amir20/dependabot/npm_and_yarn/buefy-0.8.15
Bump buefy from 0.8.14 to 0.8.15
2020-03-31 23:53:51 +00:00
dependabot-preview[bot]
ca7f91ad3b Bump buefy from 0.8.14 to 0.8.15
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.14 to 0.8.15.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.14...v0.8.15)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-31 23:53:22 +00:00
github-actions[bot]
c98e90f89b Merge pull request #338 from amir20/dependabot/npm_and_yarn/buefy-0.8.14
Bump buefy from 0.8.13 to 0.8.14
2020-03-31 22:23:25 +00:00
dependabot-preview[bot]
78268ae2fd Bump buefy from 0.8.13 to 0.8.14
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.13 to 0.8.14.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.13...v0.8.14)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-31 22:22:55 +00:00
Amir Raminfar
783c8bdcf5 Uses yarn to build 2020-03-31 13:32:32 -07:00
Amir Raminfar
d0f776fe2f Update README.md 2020-03-31 12:59:25 -07:00
Amir Raminfar
aa7169f535 Adds checkout code 2020-03-31 11:47:23 -07:00
Amir Raminfar
b98bae89c0 Fixes push.yml 2020-03-31 11:45:33 -07:00
Amir Raminfar
8681ff042e Adds docker build 2020-03-31 11:30:50 -07:00
github-actions[bot]
07800c3ffc Merge pull request #336 from amir20/dependabot/npm_and_yarn/release-it-13.5.1
Bump release-it from 13.5.0 to 13.5.1
2020-03-31 17:59:16 +00:00
github-actions[bot]
d9c6df4f81 Merge pull request #337 from amir20/dependabot/npm_and_yarn/lint-staged-10.1.1
Bump lint-staged from 10.1.0 to 10.1.1
2020-03-31 17:57:56 +00:00
Amir Raminfar
3b7631a424 Removes automerge 2020-03-31 10:53:03 -07:00
dependabot-preview[bot]
df74eb3c72 Bump lint-staged from 10.1.0 to 10.1.1
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.1.0 to 10.1.1.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.1.0...v10.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-31 17:49:43 +00:00
Amir Raminfar
be6f78f760 Adds auto merge for dependencies 2020-03-31 10:23:25 -07:00
dependabot-preview[bot]
11a70e22bc Bump release-it from 13.5.0 to 13.5.1
Bumps [release-it](https://github.com/release-it/release-it) from 13.5.0 to 13.5.1.
- [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/13.5.0...13.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-31 11:22:17 +00:00
Amir Raminfar
024dd22896 Reformats code 2020-03-30 16:20:23 -07:00
Amir Raminfar
564d089172 Fixes tessts 2020-03-30 16:13:50 -07:00
Amir Raminfar
87ade43fb7 Updates to use yarn 2020-03-30 14:55:13 -07:00
dependabot-preview[bot]
04aac0c4f9 Bump lint-staged from 10.0.10 to 10.1.0 (#335)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.0.10 to 10.1.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.0.10...v10.1.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-30 10:44:04 -07:00
dependabot-preview[bot]
ee90ab021f Bump release-it from 13.4.0 to 13.5.0 (#331)
Bumps [release-it](https://github.com/release-it/release-it) from 13.4.0 to 13.5.0.
- [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/13.4.0...13.5.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-29 14:02:31 -07:00
dependabot-preview[bot]
8c5cd12a30 Bump lint-staged from 10.0.9 to 10.0.10 (#332)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 10.0.9 to 10.0.10.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v10.0.9...v10.0.10)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-29 14:02:08 -07:00
dependabot-preview[bot]
86bc413695 Bump babel-jest from 25.2.3 to 25.2.4 (#333)
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.2.3 to 25.2.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.2.4/packages/babel-jest)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-29 14:01:56 -07:00
dependabot-preview[bot]
e7606fd960 Bump jest from 25.2.3 to 25.2.4 (#334)
Bumps [jest](https://github.com/facebook/jest) from 25.2.3 to 25.2.4.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.3...v25.2.4)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-29 14:01:43 -07:00
Amir Raminfar
4791790874 Release 1.21.7 2020-03-27 14:54:01 -07:00
Amir Raminfar
afd481d354 Sets go version to 1.14-alpine 2020-03-27 14:52:38 -07:00
Amir Raminfar
7ce5e5d883 Updates npm modules 2020-03-27 11:32:33 -07:00
Amir Raminfar
5b95dd1c20 Fixes old modules 2020-03-27 10:28:09 -07:00
dependabot-preview[bot]
94c1afe16f Bump release-it from 13.3.2 to 13.4.0 (#329)
Bumps [release-it](https://github.com/release-it/release-it) from 13.3.2 to 13.4.0.
- [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/13.3.2...13.4.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-27 10:14:21 -07:00
Amir Raminfar
729ba9b26f Fixes old modules 2020-03-26 15:15:55 -07:00
Amir Raminfar
f443ffb646 Changes browerslit 2020-03-26 12:11:49 -07:00
Amir Raminfar
6a74768e30 Runs npm audit fix 2020-03-26 10:30:19 -07:00
dependabot-preview[bot]
e5d772879c Bump babel-jest from 25.2.0 to 25.2.1 (#321)
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.2.0 to 25.2.1.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.2.1/packages/babel-jest)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-26 10:04:41 -07:00
dependabot-preview[bot]
d0676fc83c Bump hotkeys-js from 3.7.4 to 3.7.5 (#323)
Bumps [hotkeys-js](https://github.com/jaywcjlove/hotkeys) from 3.7.4 to 3.7.5.
- [Release notes](https://github.com/jaywcjlove/hotkeys/releases)
- [Commits](https://github.com/jaywcjlove/hotkeys/compare/v3.7.4...v3.7.5)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-26 10:04:31 -07:00
dependabot-preview[bot]
93fb2b3007 Bump release-it from 13.3.1 to 13.3.2 (#324)
Bumps [release-it](https://github.com/release-it/release-it) from 13.3.1 to 13.3.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/13.3.1...13.3.2)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-26 10:04:22 -07:00
dependabot-preview[bot]
f4295c46e1 Bump jest from 25.2.0 to 25.2.2 (#325)
Bumps [jest](https://github.com/facebook/jest) from 25.2.0 to 25.2.2.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.2.0...v25.2.2)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-26 09:59:08 -07:00
Amir Raminfar
c56175e625 Removes date and commit 2020-03-25 19:28:33 -07:00
dependabot-preview[bot]
5eefffac4b Bump release-it from 13.1.1 to 13.3.1 (#318)
Bumps [release-it](https://github.com/release-it/release-it) from 13.1.1 to 13.3.1.
- [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/13.1.1...13.3.1)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-25 17:54:09 -07:00
Amir Raminfar
9678869bb2 Release 1.21.6 2020-03-25 17:53:30 -07:00
dependabot-preview[bot]
c71ebf73c6 Bump babel-jest from 25.1.0 to 25.2.0 (#319)
Bumps [babel-jest](https://github.com/facebook/jest/tree/HEAD/packages/babel-jest) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/commits/v25.2.0/packages/babel-jest)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-25 12:00:39 -07:00
dependabot-preview[bot]
7b74b45d4c Bump jest from 25.1.0 to 25.2.0 (#320)
Bumps [jest](https://github.com/facebook/jest) from 25.1.0 to 25.2.0.
- [Release notes](https://github.com/facebook/jest/releases)
- [Changelog](https://github.com/facebook/jest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/facebook/jest/compare/v25.1.0...v25.2.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-25 12:00:29 -07:00
Amir Raminfar
b7e5f639b5 Updates npm modules 2020-03-24 09:26:31 -07:00
dependabot-preview[bot]
16bfe96bca Bump bulma from 0.8.0 to 0.8.1 (#314)
Bumps [bulma](https://github.com/jgthms/bulma) from 0.8.0 to 0.8.1.
- [Release notes](https://github.com/jgthms/bulma/releases)
- [Changelog](https://github.com/jgthms/bulma/blob/master/CHANGELOG.md)
- [Commits](https://github.com/jgthms/bulma/compare/0.8.0...0.8.1)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-23 13:58:20 -07:00
Amir Raminfar
911ab42b94 Updates npm modules 2020-03-23 11:53:22 -07:00
dependabot-preview[bot]
cd775bcba7 Bump @babel/core from 7.8.7 to 7.9.0 (#308)
Bumps [@babel/core](https://github.com/babel/babel) from 7.8.7 to 7.9.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.8.7...v7.9.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-23 09:22:51 -07:00
dependabot-preview[bot]
b7c75474ff Bump @babel/plugin-transform-runtime from 7.8.3 to 7.9.0 (#307)
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel) from 7.8.3 to 7.9.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.8.3...v7.9.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-23 09:08:04 -07:00
dependabot-preview[bot]
8f9a89fd59 Bump prettier from 1.19.1 to 2.0.1 (#311)
Bumps [prettier](https://github.com/prettier/prettier) from 1.19.1 to 2.0.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/1.19.1...2.0.1)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-23 09:07:22 -07:00
dependabot-preview[bot]
6190c1627c Bump github.com/sirupsen/logrus from 1.4.2 to 1.5.0 (#312)
Bumps [github.com/sirupsen/logrus](https://github.com/sirupsen/logrus) from 1.4.2 to 1.5.0.
- [Release notes](https://github.com/sirupsen/logrus/releases)
- [Changelog](https://github.com/sirupsen/logrus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sirupsen/logrus/compare/v1.4.2...v1.5.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-23 09:07:05 -07:00
Amir Raminfar
1eff26a19c Release 1.21.5 2020-03-19 09:52:17 -07:00
Amir Raminfar
3467dae99a Adds release-it 2020-03-19 09:50:03 -07:00
Amir Raminfar
8947c5f346 1.21.4 2020-03-18 20:10:09 -07:00
Amir Raminfar
56d4db6df4 1.21.3 2020-03-18 20:08:12 -07:00
Amir Raminfar
8461f656af Removes release 2020-03-18 20:07:06 -07:00
Amir Raminfar
abd91dae2e 1.21.2 2020-03-18 17:29:33 -07:00
Amir Raminfar
2d1de562d4 Adds release to github 2020-03-18 17:29:05 -07:00
Amir Raminfar
b48f387dac Updates goreleaser 2020-03-18 16:56:22 -07:00
Amir Raminfar
0355ef4486 Update README.md 2020-03-18 14:44:12 -07:00
Amir Raminfar
553cc9f337 1.21.1 2020-03-18 14:43:27 -07:00
Amir Raminfar
354d328ff8 Uses dozzle instead of test 2020-03-18 14:32:35 -07:00
Amir Raminfar
4fc1a0efc1 Updates more names 2020-03-18 14:22:05 -07:00
Amir Raminfar
9a3be58542 Adds name 2020-03-18 14:21:15 -07:00
Amir Raminfar
34f7a98035 1.21.0 2020-03-18 14:19:16 -07:00
Amir Raminfar
3a24c6e665 Adds support for multi-arch (#306)
* Uses experimental docker multi-arch

* Fixes dockerfile to build node and golang images

* Adds ldflags

* Adds buildx to push.yml

* Adds docker login

* Adds login in again

* Login using run

* Login using run

* Adds Makefile

* Updates actions

* Fixes push
2020-03-18 14:13:35 -07:00
Amir Raminfar
4bde14bd6c Fixes security 2020-03-15 14:34:45 -07:00
dependabot-preview[bot]
b99a227953 Bump date-fns from 2.10.0 to 2.11.0 (#304)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.10.0 to 2.11.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.10.0...v2.11.0)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-13 16:12:07 -07:00
dependabot-preview[bot]
09a700b36e Bump sass from 1.26.2 to 1.26.3 (#302)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.2 to 1.26.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.26.2...1.26.3)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-13 16:11:57 -07:00
dependabot-preview[bot]
eab577607f [Security] Bump acorn from 5.7.3 to 5.7.4 (#303)
Bumps [acorn](https://github.com/acornjs/acorn) from 5.7.3 to 5.7.4. **This update includes a security fix.**
- [Release notes](https://github.com/acornjs/acorn/releases)
- [Commits](https://github.com/acornjs/acorn/compare/5.7.3...5.7.4)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-13 16:11:46 -07:00
dependabot-preview[bot]
ea6e3e0725 Bump vuex from 3.1.2 to 3.1.3 (#300)
Bumps [vuex](https://github.com/vuejs/vuex) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/vuejs/vuex/releases)
- [Commits](https://github.com/vuejs/vuex/compare/v3.1.2...v3.1.3)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-11 15:10:42 -07:00
dependabot-preview[bot]
187138d7b1 Bump buefy from 0.8.12 to 0.8.13 (#301)
Bumps [buefy](https://github.com/buefy/buefy) from 0.8.12 to 0.8.13.
- [Release notes](https://github.com/buefy/buefy/releases)
- [Changelog](https://github.com/buefy/buefy/blob/dev/CHANGELOG.md)
- [Commits](https://github.com/buefy/buefy/compare/v0.8.12...v0.8.13)

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

Co-authored-by: dependabot-preview[bot] <27856297+dependabot-preview[bot]@users.noreply.github.com>
2020-03-11 15:10:29 -07:00
Amir Raminfar
dba0ddd344 Bump sass from 1.26.1 to 1.26.2 (#296)
Bumps [sass](https://github.com/sass/dart-sass) from 1.26.1 to 1.26.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.26.1...1.26.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-05 10:28:27 -08:00
Amir Raminfar
4b9aece222 Bump @babel/core from 7.8.4 to 7.8.7 (#298)
Bumps [@babel/core](https://github.com/babel/babel) from 7.8.4 to 7.8.7.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.8.4...v7.8.7)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-03-05 10:28:16 -08:00
Amir Raminfar
e756b609e8 1.20.21 2020-02-26 13:08:06 -08:00
Amir Raminfar
ba99a113cb Updates to go 1.14 2020-02-26 12:47:58 -08:00
Amir Raminfar
8be56bc673 Update README.md 2020-02-26 12:37:15 -08:00
Amir Raminfar
9bbd97a3a6 Updates node modules 2020-02-26 11:53:30 -08:00
Daniel M. Drucker
02de518971 fix filter syntax (#294) 2020-02-26 11:45:02 -08:00
Amir Raminfar
a627f2ffd5 Updates node modules 2020-02-25 11:10:29 -08:00
Amir Raminfar
0448416819 Updates buefy 2020-02-22 14:59:54 -08:00
dependabot-preview[bot]
3b2dfdc2f4 Bump github.com/stretchr/testify from 1.5.0 to 1.5.1 (#283)
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.5.0 to 1.5.1.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.5.0...v1.5.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-20 08:23:00 -08:00
Amir Raminfar
efa5777766 Updates buefy 2020-02-19 15:10:50 -08:00
dependabot-preview[bot]
38713d1f48 Bump husky from 4.2.2 to 4.2.3 (#279)
Bumps [husky](https://github.com/typicode/husky) from 4.2.2 to 4.2.3.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.2...v4.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-19 12:08:23 -08:00
dependabot-preview[bot]
1259438a3b Bump github.com/stretchr/testify from 1.4.0 to 1.5.0 (#281)
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.4.0...v1.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-19 12:08:11 -08:00
Amir Raminfar
ba494ddd57 1.20.20 2020-02-14 10:48:29 -08:00
Amir Raminfar
c5b84959c0 Collapse menu (#274)
* Tries to implement collapse menu

* Fixes using hiding

* Fixes tests

* Updates styles

* Adds better styles for collapse

* Fixes tests
2020-02-14 10:48:03 -08:00
dependabot-preview[bot]
2333084085 Bump semver from 7.1.2 to 7.1.3 (#276)
Bumps [semver](https://github.com/npm/node-semver) from 7.1.2 to 7.1.3.
- [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.1.2...v7.1.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-12 10:42:57 -08:00
dependabot-preview[bot]
caa8f9964a Bump husky from 4.2.1 to 4.2.2 (#277)
Bumps [husky](https://github.com/typicode/husky) from 4.2.1 to 4.2.2.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v4.2.1...v4.2.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-12 10:42:45 -08:00
dependabot-preview[bot]
2c756e8b46 Bump github.com/gorilla/mux from 1.7.3 to 1.7.4 (#278)
Bumps [github.com/gorilla/mux](https://github.com/gorilla/mux) from 1.7.3 to 1.7.4.
- [Release notes](https://github.com/gorilla/mux/releases)
- [Commits](https://github.com/gorilla/mux/compare/v1.7.3...v1.7.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-12 10:42:31 -08:00
Amir
1e1e956397 Fixes with go fmt 2020-02-07 15:51:09 -08:00
dependabot-preview[bot]
2594df9882 Bump ansi-to-html from 0.6.13 to 0.6.14 (#272)
Bumps [ansi-to-html](https://github.com/rburns/ansi-to-html) from 0.6.13 to 0.6.14.
- [Release notes](https://github.com/rburns/ansi-to-html/releases)
- [Commits](https://github.com/rburns/ansi-to-html/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-02-07 12:05:59 -08:00
Amir Raminfar
8da054d3fb #270, tries to fix scrollbars. Thanks @mnpenner 2020-02-02 14:38:28 -08:00
Amir Raminfar
3e7ef846ad Adds new setting option for smaller scrollbars 2020-02-02 14:37:09 -08:00
Amir Raminfar
f069c65496 Fixes double scrollbar 2020-02-02 14:15:02 -08:00
Amir
cca37c0559 Updates npm modules 2020-01-31 11:41:01 -08:00
Amir
a9da3163eb Updates npm modules 2020-01-30 13:52:55 -08:00
Amir
7cff89ae26 1.20.18 2020-01-29 13:02:46 -08:00
Amir
0a3a273aac Removes unused pacakges and updates others 2020-01-29 10:31:14 -08:00
Amir Raminfar
905ee32256 Fixes lint-staged 2020-01-22 16:25:59 -08:00
Amir Raminfar
b0c7ce13e8 Updates modules 2020-01-22 16:22:54 -08:00
dependabot-preview[bot]
6a439840f0 Bump github.com/spf13/viper from 1.6.1 to 1.6.2 (#247)
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.6.1 to 1.6.2.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.6.1...v1.6.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-22 16:04:00 -08:00
Amir Raminfar
35e7e08a07 Updates vue router 2020-01-15 19:59:36 -08:00
Amir Raminfar
2cb02f76a1 Updates vue router 2020-01-14 20:16:23 -08:00
dependabot-preview[bot]
16d286ba8f Bump @babel/plugin-transform-runtime from 7.8.0 to 7.8.3 (#239)
Bumps [@babel/plugin-transform-runtime](https://github.com/babel/babel) from 7.8.0 to 7.8.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.8.0...v7.8.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-13 15:02:41 -08:00
dependabot-preview[bot]
94999dc95b Bump @babel/core from 7.8.0 to 7.8.3 (#240)
Bumps [@babel/core](https://github.com/babel/babel) from 7.8.0 to 7.8.3.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.8.0...v7.8.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2020-01-13 14:57:56 -08:00
Amir
08fcfd8ec4 Fixes Firefox bug with scroll 2020-01-13 12:31:44 -08:00
Amir
4a253cab1a Uses actions/checkout@v1 instead 2020-01-13 12:29:04 -08:00
Amir Raminfar
911a25e0f0 Fixes firefox error 2020-01-12 20:09:28 -08:00
Amir Raminfar
f110a4c2f3 1.20.16 2020-01-12 08:25:21 -08:00
Amir Raminfar
ee18405f54 Updates modules 2020-01-12 08:15:16 -08:00
Amir Raminfar
be7012a860 1.20.15 2020-01-10 21:24:09 -08:00
Amir Raminfar
4892dcd892 Fixes tests 2020-01-10 21:24:03 -08:00
Amir Raminfar
8538fb2f55 1.20.14 2020-01-10 21:20:14 -08:00
Amir Raminfar
2592d62ed9 Removes size for second pane 2020-01-10 21:20:04 -08:00
Amir Raminfar
f91c7ccb21 1.20.13 2020-01-10 08:18:43 -08:00
Amir Raminfar
24ade2f856 Updates libs 2020-01-10 08:18:38 -08:00
Amir
756a8e4643 1.20.12 2020-01-09 11:51:53 -08:00
Amir
34533cd830 Updates npm modules 2020-01-09 11:51:49 -08:00
Amir
21e88b645e 1.20.11 2020-01-07 11:32:40 -08:00
Amir
775715a17c Fixes #185 2020-01-07 11:32:35 -08:00
Amir
a59f7caafc Updates husky 2020-01-07 10:50:14 -08:00
Amir
6903299523 1.20.10 2020-01-07 10:39:56 -08:00
Amir
1f34ebfdc1 Fixes search placeholder 2020-01-07 10:38:56 -08:00
Amir
98ee491865 Fixes title 2020-01-07 10:37:57 -08:00
Amir
d408cfca1d 1.20.9 2020-01-06 17:03:00 -08:00
Amir
a8366174e9 Fixes ui bug with menu 2020-01-06 17:02:55 -08:00
Amir
1b97d18ef0 1.20.8 2020-01-06 16:29:27 -08:00
Amir Raminfar
678b197d6a Fixes mobile to use document as container for scrolling (#223)
* Uses intersectionObserver instead

* Use intersectionObserver

* Updates mods

* Adds title when more than one container is active

* Updates logic to use native scrolling when only one logger view is open

* Fixes broken test

* Uses close instead of closed

* Fixes scrollingParent
2020-01-06 16:28:45 -08:00
Amir Raminfar
86bb4e12b3 Fixes tty bug with #200 2020-01-04 12:15:54 -08:00
Amir Raminfar
32dd847f4f Refactors tty code 2020-01-04 12:02:47 -08:00
Amir Raminfar
35a5093f8e Cleans up settings page 2019-12-30 17:06:45 -08:00
Amir Raminfar
6b5f5aeae3 Updates buefy 2019-12-30 17:02:47 -08:00
Amir Raminfar
b41f315a25 1.20.6 2019-12-30 09:50:49 -08:00
Amir Raminfar
376ee2d730 Adds compression 2019-12-30 09:50:37 -08:00
Amir Raminfar
79a42bf9fb 1.20.5 2019-12-30 09:46:19 -08:00
Amir Raminfar
2eff0dbeee Removes standard-version 2019-12-30 09:46:09 -08:00
Amir Raminfar
da9cddb691 perf: fixes a performance issues with store using strict mode 2019-12-30 09:23:13 -08:00
Amir Raminfar
184e742b1b 1.20.3 2019-12-29 15:16:08 -08:00
Amir Raminfar
42287f8848 chore(release): 1.20.4 2019-12-29 15:16:07 -08:00
Amir Raminfar
6495531d45 1.20.2 2019-12-29 15:15:53 -08:00
Amir Raminfar
3045d6011f chore(release): 1.20.3 2019-12-29 15:15:52 -08:00
Amir Raminfar
8a78db30c6 1.20.1 2019-12-29 15:15:42 -08:00
Amir Raminfar
cbe8aede9c chore(release): 1.20.2 2019-12-29 15:15:41 -08:00
Amir Raminfar
a0019b1019 Fixes scripts 2019-12-29 15:14:34 -08:00
Amir Raminfar
4e6d9c4c40 chore(release): 1.20.1 2019-12-29 15:06:13 -08:00
Amir Raminfar
54a636163c Adds standversion 2019-12-29 15:05:29 -08:00
Amir Raminfar
cc99eaa819 fix: tries to fix a scroll bug in mobile 2019-12-29 15:05:02 -08:00
Amir Raminfar
541227494f 1.20.0 2019-12-29 11:12:59 -08:00
Amir Raminfar
f4987ff9c3 Settings (#216)
* Settings in WIP

* Updates some styles

* Removes unused import

* Adds version and switcher

* Adds ionicons instead of fontawesome

* Fixes ionicon for vuejs

* Updates modules

* Adds buefy

* Adds search filter as settings

* Adds localstorage

* Fixes tests

* Adds settings for menu width

* Changes copy
2019-12-29 11:12:46 -08:00
Amir
c7ce201050 1.19.4 2019-12-20 11:27:51 -08:00
Amir
283dd90b46 Fixes z-index for mobile menu 2019-12-20 11:27:45 -08:00
Amir
5a7768f988 1.19.3 2019-12-20 10:53:40 -08:00
Amir
a84c1ce964 Fixes scroll bar bug 2019-12-20 10:52:54 -08:00
Amir
cd51084efe Updates babel 2019-12-18 17:30:24 -08:00
Amir
eb3fa00089 1.19.2 2019-12-18 17:24:27 -08:00
Amir
04b219236c Uses from and to find a good time range 2019-12-18 17:24:21 -08:00
Amir
6f3917edb8 1.19.1 2019-12-18 15:58:44 -08:00
Amir
e06954a92c Fixes UI bugs 2019-12-18 15:58:32 -08:00
Amir
9ebefc3698 Adds scrollback loading 2019-12-17 16:03:14 -08:00
Amir Raminfar
c938b2ea1b Fetch more (#209)
* Adds code to fetch more

* Adds working in progress

* Adds debugging test

* Cleans up and creates a new component

* Adds debug logs

* Adds debounce for messages

* Fixes scrolling

* Fixes go code to handle length

* Fixes tests

* Adds loader

* Fixes tests
2019-12-17 14:58:29 -08:00
Amir
9668b2cccd Adds support for split panes for the left menu 2019-12-11 13:38:14 -08:00
dependabot-preview[bot]
5b5716b51b [Security] Bump serialize-to-js from 3.0.0 to 3.0.2 (#201)
Bumps [serialize-to-js](https://github.com/commenthol/serialize-to-js) from 3.0.0 to 3.0.2. **This update includes a security fix.**
- [Release notes](https://github.com/commenthol/serialize-to-js/releases)
- [Commits](https://github.com/commenthol/serialize-to-js/compare/v3.0.0...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-11 13:31:17 -08:00
Amir
93a7f9dc7d Updates libs 2019-12-11 13:25:48 -08:00
dependabot-preview[bot]
d7a52b569c Bump github.com/spf13/viper from 1.5.0 to 1.6.1 (#203)
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.5.0 to 1.6.1.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.5.0...v1.6.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-12-11 13:24:37 -08:00
Amir Raminfar
1b4a4e626a Menu resizable (#206)
* Makes side menu resizable

* Fixes hiding of side menu

* Adds mobile menu

* Adds missing file
2019-12-11 13:23:24 -08:00
Amir
05b26bea9c 1.17.3 2019-12-11 11:52:52 -08:00
Amir
08cd8a21d4 Fixes broken regex searches 2019-12-11 11:52:37 -08:00
Amir
4a7c0f55a7 1.17.2 2019-12-03 12:35:16 -08:00
Amir
64b39d6d2b 1.17.1 2019-12-03 12:35:04 -08:00
Amir
cbca6a8413 Adds html title tag 2019-12-03 12:35:03 -08:00
TUNER88
9cfc20815a Add filter usage hints (#194)
* Add reference to supported filters

* fix spacing
2019-12-03 08:06:18 -08:00
Amir
71f214e20d Adds support for split panes 2019-11-25 15:28:04 -08:00
Amir Raminfar
63f132c820 Adds the ability to split panes and view multiple logs (#186)
* Fixes css to have full containers

* Adds split panes

* Fixes background color

* Fixes splitter

* Fixes tests

* Adds more tests

* Updates tests

* Adds vuex

* Moves splitpane to app

* Moves the panes to app

* Fixes columns with min-width

* Update packages

* Updates html to have better components

* Updates npm packages

* Fixes scrollar

* Creates a scrollable view

* Fixes App specs

* Adds vuex for component

* Updates to use splitpanes

* Styles splitter

* Removes fetch-mock
2019-11-25 15:26:42 -08:00
dependabot-preview[bot]
ffd964fe82 Bump prettier from 1.18.2 to 1.19.1 (#176)
Bumps [prettier](https://github.com/prettier/prettier) from 1.18.2 to 1.19.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/1.18.2...1.19.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-09 18:10:22 -08:00
Amir Raminfar
63dd413296 Refactors code to decouple view with event source (#177)
* Decouples provider and viewer

* Fixes title

* Clean up

* Fixes tests
2019-11-09 18:10:02 -08:00
Amir
88bb3f296a 1.16.2 2019-11-07 12:49:05 -08:00
Amir
f6e0e4ed08 Fixes search again 2019-11-07 12:43:39 -08:00
Amir
707ab974a1 Adds a test for filter 2019-11-07 12:05:18 -08:00
Amir
fa0f743cb4 1.16.1 2019-11-06 17:13:39 -08:00
Amir
bde434851c Fixes broken search 2019-11-06 17:13:20 -08:00
Amir
dc8f6f722e Adds more tests for tty 2019-11-06 11:39:07 -08:00
dependabot-preview[bot]
649e577483 Bump @vue/component-compiler-utils from 3.0.1 to 3.0.2 (#171)
Bumps [@vue/component-compiler-utils](https://github.com/vuejs/component-compiler-utils) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/vuejs/component-compiler-utils/releases)
- [Changelog](https://github.com/vuejs/component-compiler-utils/blob/master/CHANGELOG.md)
- [Commits](https://github.com/vuejs/component-compiler-utils/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-06 10:58:34 -08:00
dependabot-preview[bot]
4480587ae8 Bump fetch-mock from 7.7.2 to 7.7.3 (#169)
Bumps [fetch-mock](https://github.com/wheresrhys/fetch-mock) from 7.7.2 to 7.7.3.
- [Release notes](https://github.com/wheresrhys/fetch-mock/releases)
- [Commits](https://github.com/wheresrhys/fetch-mock/compare/v7.7.2...v7.7.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-06 10:57:45 -08:00
Amir
a4db64300c Adds support for TTY 2019-11-05 10:35:00 -08:00
Amir
8925a6ed14 Fixes security 2019-11-05 10:34:48 -08:00
Amir Raminfar
c5bd1fc735 Adds support for tty (#168) 2019-11-05 10:33:45 -08:00
dependabot-preview[bot]
61a35663dc Bump @babel/core from 7.6.4 to 7.7.0 (#167)
Bumps [@babel/core](https://github.com/babel/babel) from 7.6.4 to 7.7.0.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.6.4...v7.7.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-05 10:33:14 -08:00
dependabot-preview[bot]
2a52d7b6a1 Bump ansi-to-html from 0.6.12 to 0.6.13 (#166)
Bumps [ansi-to-html](https://github.com/rburns/ansi-to-html) from 0.6.12 to 0.6.13.
- [Release notes](https://github.com/rburns/ansi-to-html/releases)
- [Commits](https://github.com/rburns/ansi-to-html/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-05 10:26:03 -08:00
Amir
6adec499e1 Updates npm modules 2019-11-04 11:10:55 -08:00
Amir Raminfar
5990f126f4 Fixes npm node (#162) 2019-11-01 12:22:29 -07:00
Amir
e1d66b9c78 Adds a new test 2019-11-01 12:16:44 -07:00
dependabot-preview[bot]
6014e10f62 Bump github.com/spf13/viper from 1.4.0 to 1.5.0 (#161)
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.4.0 to 1.5.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.4.0...v1.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-11-01 12:15:38 -07:00
Amir Raminfar
457b760da5 1.15.9 2019-10-29 09:07:15 -07:00
Amir Raminfar
e8ab871efb Adds escapeXML: true, 2019-10-29 09:07:05 -07:00
dependabot-preview[bot]
1651025969 Bump date-fns from 2.5.1 to 2.6.0 (#153)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.5.1 to 2.6.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.5.1...v2.6.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-23 12:15:33 -07:00
dependabot-preview[bot]
b81d718b7e Bump sass from 1.23.0 to 1.23.1 (#154)
Bumps [sass](https://github.com/sass/dart-sass) from 1.23.0 to 1.23.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.23.0...1.23.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-10-23 12:15:24 -07:00
Amir
2600703625 Updates bulma 2019-10-18 15:39:10 -07:00
Amir
9a613e0b85 Fixes security 2019-10-15 12:56:21 -07:00
Amir Raminfar
8e63a5742a Updates modules 2019-10-14 08:22:41 -07:00
Amir Raminfar
c9475e10af Updates modules 2019-10-08 11:39:11 -07:00
Amir Raminfar
b10c99ae3e 1.15.8 2019-09-18 19:13:24 -07:00
Amir Raminfar
b93346b673 Updates modules 2019-09-18 19:09:59 -07:00
Amir Raminfar
4753dbd847 Updates node modules 2019-09-18 19:09:59 -07:00
dependabot-preview[bot]
44471e9d3a Bump sass from 1.22.10 to 1.22.12 (#123)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.10 to 1.22.12.
- [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.22.10...1.22.12)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-09-18 11:20:31 -07:00
dependabot-preview[bot]
0f5a89aae4 Bump date-fns from 2.1.0 to 2.2.1 (#124)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.1.0 to 2.2.1.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.1.0...v2.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-09-18 11:20:11 -07:00
Amir Raminfar
d5bdaa172b Removes showAll from reflex 2019-09-10 10:35:46 -07:00
Amir Raminfar
714975ca95 Removes github actions from readme 2019-09-09 15:51:37 -07:00
dependabot-preview[bot]
68f364c7ff Bump vue-jest from 3.0.4 to 3.0.5 (#121)
Bumps [vue-jest](https://github.com/vuejs/vue-jest) from 3.0.4 to 3.0.5.
- [Release notes](https://github.com/vuejs/vue-jest/releases)
- [Commits](https://github.com/vuejs/vue-jest/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-09-09 15:50:58 -07:00
Amir Raminfar
f34144e7fc 1.15.7 2019-09-09 15:34:13 -07:00
Amir Raminfar
e485f0fe9a Fixes bad dockerfile 2019-09-09 15:34:06 -07:00
Amir Raminfar
115e7de7bf 1.15.6 2019-09-09 15:28:42 -07:00
Amir Raminfar
080b0b29a7 Uses goreleaser_Linux_x86_64.tar.gz 2019-09-09 15:28:34 -07:00
Amir Raminfar
ebc9158a45 1.15.5 2019-09-08 15:12:27 -07:00
Amir Raminfar
38a3167cbd Reverts 2019-09-08 15:12:05 -07:00
Amir Raminfar
b48a75f30d 1.15.4 2019-09-08 14:56:28 -07:00
Amir Raminfar
5b10a39ad5 Adds g++ 2019-09-08 14:56:24 -07:00
Amir Raminfar
1d7048115e 1.15.3 2019-09-08 14:35:30 -07:00
Amir Raminfar
1eb373da5e Adds make 2019-09-08 14:34:55 -07:00
Amir Raminfar
9cf522f7df 1.15.2 2019-09-08 14:25:44 -07:00
Amir Raminfar
153a620676 Adds docker to entrypoint 2019-09-08 14:25:40 -07:00
Amir Raminfar
b1feba8314 1.15.1 2019-09-08 14:18:43 -07:00
Amir Raminfar
277701bc56 Tries to fix bash error 2019-09-08 14:18:39 -07:00
Amir Raminfar
39c250993e 1.15.0 2019-09-08 14:01:31 -07:00
Amir Raminfar
d8b82c8200 Updates goreleaser to alpine and uses 1.13 2019-09-08 14:00:47 -07:00
Amir Raminfar
93faeaaedc Updates to 1.13 2019-09-08 13:38:52 -07:00
Amir Raminfar
35d08a0a97 Updates tests to 1.13 2019-09-08 13:36:29 -07:00
Amir Raminfar
921082e32f Updates packages (#120) 2019-09-07 08:23:48 -07:00
Amir Raminfar
0dd119efae 1.14.0 2019-08-27 19:18:22 -07:00
Amir Raminfar
2019d29161 Merge branch 'updates-docker' 2019-08-27 19:17:04 -07:00
Amir Raminfar
c22afb19f3 Updates docker (#113)
* Updates go mods

* Updates docker
2019-08-27 19:14:38 -07:00
Amir Raminfar
50de4b7f11 Removes indirect 2019-08-27 19:11:16 -07:00
Amir Raminfar
a9c119297f Updates docker 2019-08-27 19:10:09 -07:00
Amir Raminfar
3c954a0840 Adds appengine 2019-08-27 19:10:03 -07:00
Amir Raminfar
494d95e9cd Updates go mods 2019-08-27 18:44:15 -07:00
dependabot-preview[bot]
489460042d Bump lint-staged from 9.2.3 to 9.2.5 (#111)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 9.2.3 to 9.2.5.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v9.2.3...v9.2.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-27 18:42:24 -07:00
Amir Raminfar
2315965eb2 Adds if for release (#112)
* Adds if for release

* Fixes if

* Fixes env
2019-08-27 15:51:42 -07:00
Amir Raminfar
0a5e6da3ae 1.13.1 2019-08-23 13:47:23 -07:00
Amir Raminfar
d9aedd78ba Renames jobs 2019-08-23 13:47:17 -07:00
Amir Raminfar
37fdeb6d18 Updates readme 2019-08-23 13:40:21 -07:00
Amir Raminfar
3bd3dd2d04 converted main.workflow to Actions V2 yml files 2019-08-23 13:35:07 -07:00
Amir Raminfar
af42d980d0 1.13.0 2019-08-23 13:29:31 -07:00
Amir Raminfar
2070b9eee4 Updates golang 2019-08-23 13:29:16 -07:00
Amir Raminfar
8651b37723 Updates libs 2019-08-23 13:27:21 -07:00
dependabot-preview[bot]
22c350aed5 Bump sass from 1.22.9 to 1.22.10 (#104)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.9 to 1.22.10.
- [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.22.9...1.22.10)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:24:54 -07:00
dependabot-preview[bot]
80686bc279 Bump concurrently from 4.1.1 to 4.1.2 (#105)
Bumps [concurrently](https://github.com/kimmobrunfeldt/concurrently) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/kimmobrunfeldt/concurrently/releases)
- [Commits](https://github.com/kimmobrunfeldt/concurrently/compare/v4.1.1...v4.1.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:24:43 -07:00
dependabot-preview[bot]
2b3a60b950 Bump husky from 3.0.3 to 3.0.4 (#106)
Bumps [husky](https://github.com/typicode/husky) from 3.0.3 to 3.0.4.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v3.0.3...v3.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:24:34 -07:00
dependabot-preview[bot]
08b52106fb Bump lint-staged from 9.2.1 to 9.2.3 (#107)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 9.2.1 to 9.2.3.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v9.2.1...v9.2.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:24:25 -07:00
dependabot-preview[bot]
1ed7c4e513 Bump github.com/stretchr/testify from 1.3.0 to 1.4.0 (#100)
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.3.0 to 1.4.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.3.0...v1.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:24:02 -07:00
dependabot-preview[bot]
3b2b46f4ac Bump date-fns from 2.0.0-beta.4 to 2.0.0 (#108)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-beta.4 to 2.0.0.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-beta.4...v2.0.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-23 13:23:40 -07:00
Pavel Makarenko
b356ffcd68 added --showAll flag that will show all containers (default: false) (#109) 2019-08-23 13:23:30 -07:00
Amir Raminfar
197c2cc87b 1.12.2 2019-08-15 16:07:44 -07:00
Amir Raminfar
ee7e919c12 Updates libs 2019-08-15 16:04:35 -07:00
dependabot-preview[bot]
e4275003b3 Bump sass from 1.22.7 to 1.22.9 (#92)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.7 to 1.22.9.
- [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.22.7...1.22.9)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-01 20:46:46 -07:00
dependabot-preview[bot]
0da82500f3 Bump husky from 3.0.1 to 3.0.2 (#91)
Bumps [husky](https://github.com/typicode/husky) from 3.0.1 to 3.0.2.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v3.0.1...v3.0.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-01 20:46:22 -07:00
dependabot-preview[bot]
c14e8bfd1a Bump mockdate from 2.0.3 to 2.0.4 (#93)
Bumps [mockdate](https://github.com/boblauer/MockDate) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/boblauer/MockDate/releases)
- [Commits](https://github.com/boblauer/MockDate/compare/v2.0.3...v2.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-01 20:46:05 -07:00
dependabot-preview[bot]
d8eda3384b Bump vue-meta from 2.1.0 to 2.2.0 (#90)
Bumps [vue-meta](https://github.com/nuxt/vue-meta) from 2.1.0 to 2.2.0.
- [Release notes](https://github.com/nuxt/vue-meta/releases)
- [Changelog](https://github.com/nuxt/vue-meta/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nuxt/vue-meta/compare/v2.1.0...v2.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-08-01 20:45:55 -07:00
Amir
fe14cd184a Fixes tests 2019-07-25 14:24:59 -07:00
Amir
5a367fa20a Uses filter for relatice time instead 2019-07-25 14:23:28 -07:00
Amir Raminfar
2db858a227 Update README.md 2019-07-25 12:27:59 -07:00
Amir Raminfar
3cc17c0802 Update README.md 2019-07-25 12:26:11 -07:00
dependabot-preview[bot]
72d20457b1 Bump date-fns from 2.0.0-beta.2 to 2.0.0-beta.3 (#86)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-beta.2 to 2.0.0-beta.3.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-beta.2...v2.0.0-beta.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-24 08:37:05 -07:00
Amir Raminfar
1efa49644e 1.12.1 2019-07-24 08:30:28 -07:00
Amir Raminfar
e733049876 Updates vue meta 2019-07-24 08:30:04 -07:00
Amir Raminfar
0562c9a625 Adds filters to be used with all supported filters (#87)
* Adds filter WIP

* Updates with map

* Updates readme
2019-07-24 08:28:59 -07:00
Amir Raminfar
40c3c2d23e Update README.md 2019-07-22 13:11:45 -07:00
Amir
366329f497 Adds more tests 2019-07-22 13:09:11 -07:00
Amir
7942ae66b7 Adds more tests 2019-07-22 13:09:11 -07:00
Amir Raminfar
a0d65b7fc5 Update README.md 2019-07-22 12:46:44 -07:00
Amir Raminfar
b4623a6d8b Update README.md 2019-07-22 12:45:57 -07:00
Amir
77a70faf04 Adds filter by name 2019-07-22 12:40:51 -07:00
Amir Raminfar
6a44ebaa5c Adds tests and uses filterName instead. (#85)
* Adding:
- ability to restrict view to container by regex match on container name
- instructions for building/running locally

* refactoring based on comments

* Updates tests

* Fixes readme
2019-07-22 12:38:52 -07:00
Amir Raminfar
1d411b490b Updates go modules 2019-07-21 16:29:10 -07:00
Amir Raminfar
1b42514642 Updates mods 2019-07-21 13:53:19 -07:00
Amir Raminfar
d371aa5111 Fixes security 2019-07-21 13:52:46 -07:00
dependabot-preview[bot]
4743c8be8f Bump sass from 1.22.4 to 1.22.5 (#76)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.4 to 1.22.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.22.4...1.22.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-18 12:58:30 -07:00
Amir
ff0a774549 1.11.8 2019-07-15 15:37:43 -07:00
Amir
94ec9e49f0 Fixes unit tests 2019-07-15 15:37:32 -07:00
Amir
a2fe47b364 1.11.7 2019-07-15 15:34:44 -07:00
Amir
c04535d9b0 Fixes scroll problem on smaller windows 2019-07-15 15:34:26 -07:00
dependabot-preview[bot]
1da26a49c1 Bump vue-meta from 2.0.4 to 2.0.5 (#73)
Bumps [vue-meta](https://github.com/nuxt/vue-meta) from 2.0.4 to 2.0.5.
- [Release notes](https://github.com/nuxt/vue-meta/releases)
- [Changelog](https://github.com/nuxt/vue-meta/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nuxt/vue-meta/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-12 10:07:14 -07:00
dependabot-preview[bot]
459f3f534d Bump sass from 1.22.3 to 1.22.4 (#74)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.3 to 1.22.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.22.3...1.22.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-12 10:07:01 -07:00
dependabot-preview[bot]
2b73c79c5d [Security] Bump lodash from 4.17.11 to 4.17.14 (#71)
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.14. **This update includes security fixes.**
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.14)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-11 11:38:36 -07:00
dependabot-preview[bot]
321100935c Bump lint-staged from 9.1.0 to 9.2.0 (#72)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 9.1.0 to 9.2.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v9.1.0...v9.2.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-11 11:38:28 -07:00
dependabot-preview[bot]
1af781f7a4 Bump fetch-mock from 7.3.3 to 7.3.6 (#70)
Bumps [fetch-mock](https://github.com/wheresrhys/fetch-mock) from 7.3.3 to 7.3.6.
- [Release notes](https://github.com/wheresrhys/fetch-mock/releases)
- [Commits](https://github.com/wheresrhys/fetch-mock/compare/v7.3.3...v7.3.6)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-11 11:38:19 -07:00
dependabot-preview[bot]
af4215f0fb Bump @babel/core from 7.5.0 to 7.5.4 (#69)
Bumps [@babel/core](https://github.com/babel/babel) from 7.5.0 to 7.5.4.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.5.0...v7.5.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-11 11:38:10 -07:00
dependabot-preview[bot]
6474ebf9c2 Bump lint-staged from 9.0.2 to 9.1.0 (#68)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 9.0.2 to 9.1.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v9.0.2...v9.1.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-09 14:57:07 -07:00
Amir Raminfar
bb4a4407c7 Updates libs 2019-07-05 08:24:30 -07:00
dependabot-preview[bot]
e534397dc5 Bump github.com/gorilla/mux from 1.7.2 to 1.7.3 (#58)
Bumps [github.com/gorilla/mux](https://github.com/gorilla/mux) from 1.7.2 to 1.7.3.
- [Release notes](https://github.com/gorilla/mux/releases)
- [Commits](https://github.com/gorilla/mux/compare/v1.7.2...v1.7.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-07-03 09:19:57 -07:00
dependabot-preview[bot]
a0769a3bdc Bump sass from 1.22.0 to 1.22.1 (#56)
Bumps [sass](https://github.com/sass/dart-sass) from 1.22.0 to 1.22.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.22.0...1.22.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-30 12:25:28 -07:00
dependabot-preview[bot]
7586b350f3 Bump date-fns from 2.0.0-alpha.37 to 2.0.0-beta.2 (#55)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.37 to 2.0.0-beta.2.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.37...v2.0.0-beta.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-30 11:47:41 -07:00
dependabot-preview[bot]
7af1a65503 Bump concurrently from 4.1.0 to 4.1.1 (#53)
Bumps [concurrently](https://github.com/kimmobrunfeldt/concurrently) from 4.1.0 to 4.1.1.
- [Release notes](https://github.com/kimmobrunfeldt/concurrently/releases)
- [Commits](https://github.com/kimmobrunfeldt/concurrently/compare/v4.1.0...v4.1.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-30 11:39:33 -07:00
dependabot-preview[bot]
3e29ea82d0 Bump husky from 2.5.0 to 2.7.0 (#57)
Bumps [husky](https://github.com/typicode/husky) from 2.5.0 to 2.7.0.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/commits)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-30 11:39:19 -07:00
Amir Raminfar
082ad4d222 1.11.6 2019-06-25 21:05:55 -07:00
Amir Raminfar
a64e6f804c Updates modules 2019-06-25 21:05:46 -07:00
dependabot-preview[bot]
82e3eb3671 Bump sass from 1.21.0 to 1.22.0 (#51)
Bumps [sass](https://github.com/sass/dart-sass) from 1.21.0 to 1.22.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.21.0...1.22.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-25 09:44:56 -07:00
dependabot-preview[bot]
baa2c5583f Bump date-fns from 2.0.0-alpha.36 to 2.0.0-alpha.37 (#50)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.36 to 2.0.0-alpha.37.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.36...v2.0.0-alpha.37)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-25 09:44:47 -07:00
dependabot-preview[bot]
ef1d872c68 Bump github.com/gobuffalo/packr from 1.26.0 to 1.30.1 (#49)
Bumps [github.com/gobuffalo/packr](https://github.com/gobuffalo/packr) from 1.26.0 to 1.30.1.
- [Release notes](https://github.com/gobuffalo/packr/releases)
- [Changelog](https://github.com/gobuffalo/packr/blob/master/.goreleaser.yml)
- [Commits](https://github.com/gobuffalo/packr/compare/v1.26.0...v1.30.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-25 09:44:36 -07:00
Amir
729e894553 1.11.5 2019-06-24 12:02:55 -07:00
Amir
1356f0bfc6 Fixes checksum 2019-06-24 11:43:45 -07:00
Amir
1c576b71a7 1.11.4 2019-06-24 11:13:08 -07:00
dependabot-preview[bot]
adf5055397 Bump vue-meta from 2.0.3 to 2.0.4 (#47)
Bumps [vue-meta](https://github.com/nuxt/vue-meta) from 2.0.3 to 2.0.4.
- [Release notes](https://github.com/nuxt/vue-meta/releases)
- [Changelog](https://github.com/nuxt/vue-meta/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nuxt/vue-meta/compare/v2.0.3...v2.0.4)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-24 09:26:30 -07:00
dependabot-preview[bot]
4011cc5f65 Bump date-fns from 2.0.0-alpha.34 to 2.0.0-alpha.36 (#46)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.34 to 2.0.0-alpha.36.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.34...v2.0.0-alpha.36)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-24 09:26:15 -07:00
dependabot-preview[bot]
df38a3d138 Bump husky from 2.4.1 to 2.5.0 (#48)
Bumps [husky](https://github.com/typicode/husky) from 2.4.1 to 2.5.0.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v2.4.1...v2.5.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-24 09:26:05 -07:00
Amir Raminfar
c08cadcb89 1.11.3 2019-06-17 16:08:30 -07:00
Amir Raminfar
9a6f9afa18 Fixes snapshots 2019-06-17 15:47:03 -07:00
Amir Raminfar
08201fc6d3 Fixes bad width 2019-06-17 15:46:18 -07:00
Amir
603b7a7298 Cleans mod file 2019-06-14 12:12:29 -07:00
Amir Raminfar
39f5c86159 Update README.md 2019-06-14 12:01:08 -07:00
dependabot-preview[bot]
f45cafb10c Bump mockdate from 2.0.2 to 2.0.3 (#43)
Bumps [mockdate](https://github.com/boblauer/MockDate) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/boblauer/MockDate/releases)
- [Commits](https://github.com/boblauer/MockDate/commits/v2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-14 11:57:17 -07:00
dependabot-preview[bot]
45fc80342e Bump github.com/gobuffalo/packr from 1.25.0 to 1.26.0 (#44)
Bumps [github.com/gobuffalo/packr](https://github.com/gobuffalo/packr) from 1.25.0 to 1.26.0.
- [Release notes](https://github.com/gobuffalo/packr/releases)
- [Changelog](https://github.com/gobuffalo/packr/blob/master/.goreleaser.yml)
- [Commits](https://github.com/gobuffalo/packr/compare/v1.25.0...v1.26.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-14 11:45:22 -07:00
dependabot-preview[bot]
c73c6e3bfc Bump lint-staged from 8.2.0 to 8.2.1 (#42)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 8.2.0 to 8.2.1.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v8.2.0...v8.2.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-14 11:41:23 -07:00
dependabot-preview[bot]
35caea0830 Bump date-fns from 2.0.0-alpha.33 to 2.0.0-alpha.34 (#41)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.33 to 2.0.0-alpha.34.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.33...v2.0.0-alpha.34)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-14 11:41:07 -07:00
Amir Raminfar
8eccef7e19 Update README.md 2019-06-14 08:53:56 -07:00
ZEROF
6fdfd901a0 Add deploy with docker swarm (#40) 2019-06-14 06:36:38 -07:00
Amir Raminfar
e274786126 1.11.2 2019-06-13 19:48:12 -07:00
Amir Raminfar
a03690044e Tries to fix UTC 2019-06-13 19:45:00 -07:00
Amir Raminfar
dce72466bc Fixes timezone issues 2019-06-13 19:38:44 -07:00
Amir Raminfar
1ffb85ea13 1.11.1 2019-06-13 19:21:36 -07:00
Amir Raminfar
4d5fbe424b Fixes bug with search and colors 2019-06-13 19:21:29 -07:00
Amir
bd2af1568c Fixes bad case 2019-06-13 15:22:31 -07:00
Amir
77e2426605 Fixes path 2019-06-13 15:21:49 -07:00
Amir
fde6892783 Adds color tests 2019-06-13 11:24:20 -07:00
Amir
9e2135d923 Adds more tests 2019-06-13 11:21:52 -07:00
dependabot-preview[bot]
596390f813 Bump date-fns from 2.0.0-alpha.32 to 2.0.0-alpha.33 (#39)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.32 to 2.0.0-alpha.33.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.32...v2.0.0-alpha.33)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-13 11:05:44 -07:00
Amir
181812d321 1.11.0 2019-06-13 09:18:37 -07:00
Amir Raminfar
0d4bfc5e25 Adds ansi colors via ansi-to-html (#38) 2019-06-13 09:18:22 -07:00
Amir Raminfar
33b33aff11 1.10.3 2019-06-12 19:53:03 -07:00
Amir Raminfar
506e03bbf7 Fixes bug 2019-06-12 19:51:13 -07:00
Amir Raminfar
1f7385da36 Changes files 2019-06-12 19:45:25 -07:00
Amir Raminfar
d0036f177f Adds more tests and changes files (#36) 2019-06-12 19:40:27 -07:00
Amir Raminfar
07e3571a78 Jest tests (#35)
* Adds tests for vue

* Adds tests and fixes flush

* Update main.workflow

* Adds more tests
2019-06-12 16:02:56 -07:00
dependabot-preview[bot]
3662cfb03c Bump husky from 2.4.0 to 2.4.1 (#34)
Bumps [husky](https://github.com/typicode/husky) from 2.4.0 to 2.4.1.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v2.4.0...v2.4.1)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-12 11:44:20 -07:00
dependabot-preview[bot]
9ba92162a4 Bump vue-meta from 2.0.2 to 2.0.3 (#32)
Bumps [vue-meta](https://github.com/nuxt/vue-meta) from 2.0.2 to 2.0.3.
- [Release notes](https://github.com/nuxt/vue-meta/releases)
- [Changelog](https://github.com/nuxt/vue-meta/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nuxt/vue-meta/compare/v2.0.2...v2.0.3)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-12 11:44:09 -07:00
dependabot-preview[bot]
8ff7881971 Bump date-fns from 2.0.0-alpha.31 to 2.0.0-alpha.32 (#33)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.31 to 2.0.0-alpha.32.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.31...v2.0.0-alpha.32)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-12 11:43:58 -07:00
Amir
43be83330e Uses latest goreleaser 2019-06-12 09:20:17 -07:00
Amir
275f72de12 1.10.2 2019-06-12 09:15:55 -07:00
Amir
e94cfea3c2 Updates goreleaser and labels 2019-06-12 09:15:38 -07:00
Amir
c8d7e165a7 Updates modules 2019-06-10 09:17:32 -07:00
Amir
bc608c302e Updates mod file 2019-06-10 09:09:38 -07:00
dependabot-preview[bot]
b5a4ee3b12 Bump husky from 2.3.0 to 2.4.0 (#25)
Bumps [husky](https://github.com/typicode/husky) from 2.3.0 to 2.4.0.
- [Release notes](https://github.com/typicode/husky/releases)
- [Changelog](https://github.com/typicode/husky/blob/master/CHANGELOG.md)
- [Commits](https://github.com/typicode/husky/compare/v2.3.0...v2.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:42:30 -07:00
dependabot-preview[bot]
5b8c1249e6 Bump sass from 1.20.1 to 1.21.0 (#28)
Bumps [sass](https://github.com/sass/dart-sass) from 1.20.1 to 1.21.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.20.1...1.21.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:41:50 -07:00
dependabot-preview[bot]
e4f7f2410e Bump github.com/spf13/viper from 1.3.2 to 1.4.0 (#29)
Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.3.2 to 1.4.0.
- [Release notes](https://github.com/spf13/viper/releases)
- [Commits](https://github.com/spf13/viper/compare/v1.3.2...v1.4.0)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:41:26 -07:00
dependabot-preview[bot]
d8b95a2921 Bump github.com/gorilla/mux from 1.7.1 to 1.7.2 (#24)
Bumps [github.com/gorilla/mux](https://github.com/gorilla/mux) from 1.7.1 to 1.7.2.
- [Release notes](https://github.com/gorilla/mux/releases)
- [Commits](https://github.com/gorilla/mux/compare/v1.7.1...v1.7.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:34:00 -07:00
dependabot-preview[bot]
513e6f4e07 Bump prettier from 1.17.1 to 1.18.2 (#27)
Bumps [prettier](https://github.com/prettier/prettier) from 1.17.1 to 1.18.2.
- [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/1.17.1...1.18.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:32:23 -07:00
dependabot-preview[bot]
8146169e18 Bump @babel/core from 7.4.4 to 7.4.5 (#31)
Bumps [@babel/core](https://github.com/babel/babel) from 7.4.4 to 7.4.5.
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/master/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/compare/v7.4.4...v7.4.5)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:32:07 -07:00
dependabot-preview[bot]
a620ef1c32 Bump github.com/sirupsen/logrus from 1.4.1 to 1.4.2 (#26)
Bumps [github.com/sirupsen/logrus](https://github.com/sirupsen/logrus) from 1.4.1 to 1.4.2.
- [Release notes](https://github.com/sirupsen/logrus/releases)
- [Changelog](https://github.com/sirupsen/logrus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sirupsen/logrus/compare/v1.4.1...v1.4.2)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:31:13 -07:00
dependabot-preview[bot]
c81c9a4e7f Bump date-fns from 2.0.0-alpha.25 to 2.0.0-alpha.31 (#30)
Bumps [date-fns](https://github.com/date-fns/date-fns) from 2.0.0-alpha.25 to 2.0.0-alpha.31.
- [Release notes](https://github.com/date-fns/date-fns/releases)
- [Changelog](https://github.com/date-fns/date-fns/blob/master/CHANGELOG.md)
- [Commits](https://github.com/date-fns/date-fns/compare/v2.0.0-alpha.25...v2.0.0-alpha.31)

Signed-off-by: dependabot-preview[bot] <support@dependabot.com>
2019-06-09 21:30:53 -07:00
Amir Raminfar
e7f9faf70c 1.10.1 2019-05-26 21:16:46 -07:00
Amir Raminfar
6294db4ba7 Adds favicon 2019-05-26 21:16:25 -07:00
Amir Raminfar
7523bae996 Removes docs and src 2019-05-26 09:39:04 -07:00
Amir
68f03b7790 1.10.0 2019-05-24 08:41:39 -07:00
Amir
03f88676a9 Removes EXPOSE. Fixes #23 2019-05-24 08:41:14 -07:00
Amir Raminfar
e6661d5f20 Updates site 2019-05-22 20:11:20 -07:00
Amir Raminfar
72b5cf8199 Adds buttons div and docker pulls 2019-05-22 20:10:46 -07:00
Amir Raminfar
de987026b0 Fixes rounded corner 2019-05-21 20:34:25 -07:00
Amir
b7bfe1cb7a Updates meta tags 2019-05-21 08:47:52 -07:00
Amir Raminfar
309c0240c0 Fixes broken js in docs 2019-05-21 07:17:57 -07:00
Amir Raminfar
bc89a91795 Fixes js error 2019-05-21 07:17:38 -07:00
Amir Raminfar
7e4c82a9ab Inlines css and js for docs 2019-05-21 07:15:09 -07:00
Amir Raminfar
64e2f44bf5 Updates bulma 2019-05-19 12:04:25 -07:00
Amir Raminfar
c1dea09711 Updates web with icons 2019-05-19 11:58:01 -07:00
Amir Raminfar
e1ef638c5f Adds icons 2019-05-19 11:57:37 -07:00
Amir Raminfar
867a453500 Updates docs 2019-05-18 16:27:15 -07:00
Amir Raminfar
8032b1dc83 Adds clipboar.js and more text 2019-05-18 16:26:35 -07:00
Amir Raminfar
19053a8d15 Updates css 2019-05-18 14:07:06 -07:00
Amir Raminfar
17e1d82d84 Updates screenshot 2019-05-18 13:56:58 -07:00
Amir Raminfar
fd866288f0 Updates website 2019-05-18 10:22:24 -07:00
Amir Raminfar
e7f8e14e8f Updates website 2019-05-18 10:22:17 -07:00
Amir Raminfar
6adce272b7 Updates images and fixes order 2019-05-18 10:21:47 -07:00
Amir Raminfar
dee0655c8f Updates mp4 2019-05-18 10:10:34 -07:00
Amir Raminfar
628c5aead2 Makes mp4 smaller 2019-05-18 10:09:54 -07:00
Amir Raminfar
2f7846aeb9 Resizes image 2019-05-18 09:55:32 -07:00
Amir Raminfar
ae0972963c Update video and adds poster 2019-05-18 08:18:47 -07:00
Amir Raminfar
e2ad58a090 Update video and adds poster 2019-05-18 08:13:17 -07:00
Amir Raminfar
6779db113a UPdates changes 2019-05-17 18:51:19 -07:00
Amir Raminfar
ec50054d52 Updates website 2019-05-17 18:48:40 -07:00
Amir Raminfar
7e65313765 Updates website 2019-05-17 18:48:14 -07:00
Amir Raminfar
e6de703443 Does round 1 website 2019-05-17 18:46:54 -07:00
Amir
2b7cfc6ef4 Removes unused files 2019-05-17 11:08:31 -07:00
Amir Raminfar
46736c6137 Create CNAME 2019-05-17 11:02:06 -07:00
Amir
7a33417e45 Adds docs 2019-05-17 11:01:21 -07:00
Amir Raminfar
0cd617d1ea Create CNAME 2019-05-17 09:48:30 -07:00
Amir
70fae98a51 1.9.0 2019-05-14 13:01:41 -07:00
Amir Raminfar
87dd7c3d3b Fixes tail size parameter (#22) 2019-05-14 10:57:27 -07:00
Amir Raminfar
512b03c098 Updates readme 2019-05-14 08:33:15 -07:00
Amir Raminfar
bfda0ceb84 1.8.7 2019-05-13 20:47:07 -07:00
Amir
29f8fe0b51 Adds space 2019-05-13 13:46:03 -07:00
Amir
40f4d51562 Adds animation to mark 2019-05-13 13:45:46 -07:00
Amir
8d59ecee88 1.8.6 2019-05-13 12:12:45 -07:00
Amir
dbc9359c3d 1.8.5 2019-05-13 11:23:47 -07:00
Amir Raminfar
11ed955b37 Adds viper for env parsing (#21) 2019-05-13 11:23:35 -07:00
Amir
88ebe6655b Updates modules 2019-05-13 09:57:42 -07:00
Amir
817a5c5c8e Updates goreleaser docker 2019-05-07 10:58:45 -07:00
Amir Raminfar
fbc7b6bb1b 1.8.4 2019-05-06 21:10:41 -07:00
Amir Raminfar
890d62864c Updates javascript 2019-05-06 21:10:36 -07:00
Amir
2d1fb4c198 1.8.3 2019-04-15 16:36:04 -07:00
Amir
036ce7d98a Fixes bug 2019-04-15 16:35:56 -07:00
Amir Raminfar
35769b0d5e 1.8.2 2019-04-13 19:17:02 -07:00
Amir Raminfar
03eab4c5f8 Enables regex 2019-04-13 19:16:25 -07:00
Amir Raminfar
9e92f9621b 1.8.1 2019-04-13 09:05:28 -07:00
Amir Raminfar
4debc53baa Fixes bug with reset 2019-04-13 09:05:24 -07:00
Amir Raminfar
76f6c8fb4f Adds search 2019-04-13 08:53:52 -07:00
Amir Raminfar
455ec91735 Cleans up styles 2019-04-13 08:53:18 -07:00
Amir Raminfar
43db357466 Uses smart case 2019-04-12 20:56:02 -07:00
Amir Raminfar
97213ac0fc Fixes style 2019-04-12 20:45:08 -07:00
Amir Raminfar
5087ff02f0 Adds search and keyboard short cuts 2019-04-12 20:45:07 -07:00
Amir
f9a47face0 Fixes audit 2019-04-10 12:31:26 -07:00
Amir Raminfar
5797c16407 Create CODE_OF_CONDUCT.md 2019-04-10 08:19:51 -07:00
Amir Raminfar
8c129b2695 1.7.4 2019-03-23 10:05:58 -07:00
Amir Raminfar
a97662f3f9 Updates packages in node 2019-03-23 10:05:11 -07:00
Amir Raminfar
36c0d327c7 Delete .travis.yml 2019-03-18 20:51:20 -07:00
Amir Raminfar
117a58e6b8 1.7.3 2019-03-18 20:03:50 -07:00
Amir Raminfar
b29fd24f92 Adds npm ci 2019-03-18 20:03:46 -07:00
Amir Raminfar
6c5323fb67 Update main.workflow 2019-03-18 19:41:44 -07:00
Amir Raminfar
4dc3e32e76 1.7.2 2019-03-18 19:41:29 -07:00
Amir
b7004b2068 Fixes releaser 2019-03-18 09:27:56 -07:00
Amir Raminfar
3772d36e41 Tries to make github run golang 2019-03-17 17:43:23 -07:00
Amir Raminfar
86fd8cb82e Update main.workflow 2019-03-17 10:18:30 -07:00
Amir Raminfar
2f472ecd36 Update main.workflow 2019-03-17 09:59:20 -07:00
Amir Raminfar
d430e7f7fd 1.7.1 2019-03-15 18:45:28 -07:00
Amir Raminfar
5602edb322 1.7.0 2019-03-15 18:42:31 -07:00
Amir Raminfar
a1066dee5d 1.6.5 2019-03-15 18:42:24 -07:00
Amir Raminfar
30f23ccaa9 1.6.4 2019-03-15 18:42:21 -07:00
Amir Raminfar
72cc1a08f8 1.6.3 2019-03-15 18:42:16 -07:00
iwittkau
37bd1d1163 Preserve whitespace (#18)
* assets/pages: preserve whitespace of log messages

* assets/pages: remove unnecessary css class

* assets/pages: use 'pre-wrap' wrap lines correctly
2019-03-15 09:27:12 -07:00
Amir
9d76c260e8 Uses 1.12 2019-03-15 09:17:36 -07:00
Amir
dba2349f9e Attepts to fix go mod 2019-03-15 09:07:30 -07:00
Amir Raminfar
e09818969c Revert "assets/pages: preserve whitespace of log messages (#16)" (#17)
This reverts commit 137c71e50d.
2019-03-14 19:22:05 -07:00
Amir Raminfar
5dd1bf971d 1.6.2 2019-03-14 18:46:09 -07:00
Amir Raminfar
66262869b7 1.6.1 2019-03-14 18:45:32 -07:00
Amir Raminfar
a7e71687ba Updates packages 2019-03-14 18:45:26 -07:00
iwittkau
137c71e50d assets/pages: preserve whitespace of log messages (#16)
* assets/pages: preserve whitespace of log messages

* assets/pages: remove unnecessary css class
2019-03-14 09:12:03 -07:00
Amir Raminfar
7c27dde94c Updates parcel 2019-03-09 18:19:03 -08:00
Amir Raminfar
6b432803ff Updates packages and fixes parcel with npx 2019-03-04 09:04:12 -08:00
Amir Raminfar
6394fcea39 1.6.0 2019-02-26 08:29:22 -08:00
Amir Raminfar
ace93d5e73 1.5.11 2019-02-26 08:29:11 -08:00
Amir Raminfar
6d3fafb8d3 Updates packages 2019-02-26 08:29:06 -08:00
Amir Raminfar
875aede316 1.5.10 2019-02-19 14:49:09 -08:00
Amir Raminfar
667c096ef5 Adds env variable for tail and fixes #15 2019-02-19 14:49:04 -08:00
Amir Raminfar
e06d6a111a 1.5.9 2019-02-16 15:20:38 -08:00
Amir Raminfar
537e1a1b5b Updates packages 2019-02-16 15:20:18 -08:00
Amir Raminfar
b49d391e73 Updates mods 2019-02-13 10:45:20 -08:00
Amir Raminfar
0ab4f7ab51 Updates vuejs 2019-02-13 10:43:21 -08:00
Amir Raminfar
b41f20ecf2 Updates vuejs 2019-02-09 09:06:58 -08:00
Amir Raminfar
9a0e1571c5 Updates vuejs 2019-02-07 10:42:32 -08:00
Amir Raminfar
d50282a9ed Updates libs 2019-02-05 14:23:25 -08:00
Amir Raminfar
169d5e88f9 1.5.8 2019-01-28 12:29:09 -08:00
Amir Raminfar
488d1aa532 Update go mods 2019-01-28 12:26:37 -08:00
Amir Raminfar
26a1367cae Updates node modules 2019-01-28 12:21:18 -08:00
Amir Raminfar
0cb83dc4c8 Updates js libs 2019-01-02 08:07:51 -08:00
Amir Raminfar
c9428ae749 Updates go mods 2019-01-02 08:05:11 -08:00
Amir Raminfar
804c0e6971 1.5.7 2018-12-15 13:54:17 -08:00
Amir Raminfar
fd06872223 Moves version up 2018-12-15 13:54:11 -08:00
Amir Raminfar
7a3f0cade2 1.5.6 2018-12-15 13:45:36 -08:00
Amir Raminfar
eb622b5408 Adds version to log 2018-12-15 13:45:32 -08:00
Amir Raminfar
8812f80bb8 1.5.5 2018-12-15 13:20:37 -08:00
Amir Raminfar
c479121bc6 Updates babel 2018-12-15 13:20:37 -08:00
Amir Raminfar
bcdba14302 Update README.md 2018-12-14 18:31:30 -08:00
Amir Raminfar
21674ef7d8 Update README.md 2018-12-14 18:26:22 -08:00
Amir Raminfar
efb03b2840 Update README.md 2018-12-13 08:46:04 -08:00
Amir Raminfar
716e8c6db5 Adds new badges 2018-12-13 08:34:07 -08:00
Amir Raminfar
4f7598ada6 1.5.4 2018-12-12 19:04:41 -08:00
Amir Raminfar
5dcde91936 Fixes #12 2018-12-12 19:04:23 -08:00
Amir Raminfar
64ba618188 1.5.3 2018-12-12 17:44:51 -08:00
Amir Raminfar
b2ac37c322 Updates vue again 2018-12-12 17:44:35 -08:00
Amir Raminfar
72839fea10 Updates vuejs 2018-12-10 07:31:13 -08:00
Amir Raminfar
262ba5e9f4 Updates vuejs 2018-12-09 11:03:26 -08:00
Amir Raminfar
d0e1614e08 1.5.2 2018-12-08 16:45:47 -08:00
Amir Raminfar
da62f2543f Adds gomod 2018-12-08 16:40:22 -08:00
Amir Raminfar
9462adaae2 Adds go.mod 2018-12-08 16:34:54 -08:00
Amir Raminfar
952c38e7b3 Fixes messages possible deadlock 2018-12-05 06:57:37 -08:00
Amir Raminfar
00615f5ffa Adds more logs 2018-12-04 16:06:56 -08:00
Amir Raminfar
38f90f396f Adds more tests 2018-12-04 15:57:31 -08:00
Amir Raminfar
4a2f757754 Updates js libs 2018-12-04 09:46:47 -08:00
Amir Raminfar
2016a4c59c 1.5.1 2018-12-03 21:05:39 -08:00
Amir Raminfar
09a8ace624 Removes timeout 2018-12-03 21:05:26 -08:00
Amir Raminfar
8c2ad64439 1.5.0 2018-12-03 17:44:47 -08:00
Amir Raminfar
e0c6244d54 Adds graceful shutdown 2018-12-03 17:37:23 -08:00
Amir Raminfar
2a837762ed Adds more tests 2018-12-03 17:27:50 -08:00
Amir Raminfar
19ce377ee9 Adds reflex config 2018-12-03 13:32:00 -08:00
Amir Raminfar
b4532bf9f7 Fixes npm watch 2018-12-03 13:26:17 -08:00
Amir Raminfar
033636dd46 1.4.6 2018-12-03 13:10:54 -08:00
Amir Raminfar
769de61657 1.4.5 2018-12-03 13:09:13 -08:00
64 changed files with 16130 additions and 9887 deletions

View File

@@ -1,18 +1,9 @@
{
"presets": [
[
"@babel/preset-env",
{
"modules": false
}
]
],
"plugins": [
[
"@babel/plugin-transform-runtime",
{
"regenerator": true
}
]
]
"presets": [["@babel/preset-env", { "modules": false }]],
"plugins": [["@babel/plugin-transform-runtime", { "regenerator": true }]],
"env": {
"test": {
"presets": [["@babel/preset-env", { "targets": { "node": "current" } }]]
}
}
}

8
.dockerignore Normal file
View File

@@ -0,0 +1,8 @@
node_modules
.cache
.idea
dist
.git
static
integration
demo.gif

View File

Before

Width:  |  Height:  |  Size: 24 MiB

After

Width:  |  Height:  |  Size: 24 MiB

59
.github/workflows/deploy.yml vendored Normal file
View File

@@ -0,0 +1,59 @@
on:
push:
tags:
- "v*"
name: Test and Release
jobs:
npm-test:
name: JavaScript Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
- name: Install depdencies
run: yarn
- name: Run Tests
run: yarn test
go-test:
name: Go Tests
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v1
with:
go-version: 1.14.x
- name: Checkout code
uses: actions/checkout@v2
- name: Run Go Tests with Coverage
run: go test -cover ./...
int-test:
needs: [go-test, npm-test]
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build images
run: docker-compose -f integration/docker-compose.test.yml build
- name: Run tests
run: docker-compose -f integration/docker-compose.test.yml run integration
buildx:
needs: [int-test]
name: Release
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Set up Docker Buildx
id: buildx
uses: crazy-max/ghaction-docker-buildx@v1
with:
version: latest
- name: Available platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Docker Login
run: docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
- name: Run Buildx
run: make publish

View File

@@ -0,0 +1,19 @@
name: Docker image (latest-dev)
on:
push:
branches:
- master
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: jerray/publish-docker-action@master
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
file: Dockerfile
repository: amir20/dozzle
tags: latest-dev

37
.github/workflows/test.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
on: push
name: Test
jobs:
npm-test:
name: JavaScript Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install Node
uses: actions/setup-node@v1
- name: Install depdencies
run: yarn
- name: Run Tests
run: yarn test
go-test:
name: Go Tests
runs-on: ubuntu-latest
steps:
- name: Install Go
uses: actions/setup-go@v1
with:
go-version: 1.14.x
- name: Checkout code
uses: actions/checkout@v2
- name: Run Go Tests with Coverage
run: go test -cover ./...
int-test:
name: Integration Tests
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Build images
run: docker-compose -f integration/docker-compose.test.yml build
- name: Run tests
run: docker-compose -f integration/docker-compose.test.yml run integration

View File

@@ -1,38 +0,0 @@
before:
hooks:
- npm run clean
- npm run build
- packr
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- darwin
goarch:
- amd64
- arm
- arm64
archive:
replacements:
amd64: 64-bit
386: 32-bit
arm64: ARM_64-bit
arm: ARM_32-bit
linux: Linux
darwin: Darwin
checksum:
name_template: "checksums.txt"
snapshot:
name_template: "{{ .Tag }}-next"
changelog:
sort: asc
filters:
exclude:
- "^docs:"
- "^test:"
dockers:
- image_templates:
- "amir20/dozzle:{{ .Tag }}"
- "amir20/dozzle:v{{ .Major }}.{{ .Minor }}"
- amir20/dozzle:latest

3
.htmlnanorc.js Normal file
View File

@@ -0,0 +1,3 @@
module.exports = {
minifySvg: false,
};

3
.prettierrc.js Normal file
View File

@@ -0,0 +1,3 @@
module.exports = {
printWidth: 120,
};

View File

@@ -1,3 +0,0 @@
{
"printWidth": 120
}

1
.reflex Normal file
View File

@@ -0,0 +1 @@
-r '\.go$' -R '^node_modules/' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go routes.go --level debug

View File

@@ -1,26 +0,0 @@
language: go
go:
- "1.11"
services:
- docker
before_install:
- nvm install --lts
- npm i -g npm
- npm ci
- go get -u github.com/gobuffalo/packr/packr
after_success:
# docker login is required if you want to push docker images.
# DOCKER_PASSWORD should be a secret in your .travis.yml configuration.
# - test -n "$TRAVIS_TAG" && docker login -u=myuser -p="$DOCKER_PASSWORD"
deploy:
- provider: script
skip_cleanup: true
script: curl -sL https://git.io/goreleaser | bash
on:
tags: true
condition: $TRAVIS_OS_NAME = linux

76
CODE_OF_CONDUCT.md Normal file
View File

@@ -0,0 +1,76 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as
contributors and maintainers pledge to making participation in our project and
our community a harassment-free experience for everyone, regardless of age, body
size, disability, ethnicity, sex characteristics, gender identity and expression,
level of experience, education, socio-economic status, nationality, personal
appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment
include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or
advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic
address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a
professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable
behavior and are expected to take appropriate and fair corrective action in
response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or
reject comments, commits, code, wiki edits, issues, and other contributions
that are not aligned to this Code of Conduct, or to ban temporarily or
permanently any contributor for other behaviors that they deem inappropriate,
threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces
when an individual is representing the project or its community. Examples of
representing a project or community include using an official project e-mail
address, posting via an official social media account, or acting as an appointed
representative at an online or offline event. Representation of a project may be
further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be
reported by contacting the project team at findamir@gmail.com. All
complaints will be reviewed and investigated and will result in a response that
is deemed necessary and appropriate to the circumstances. The project team is
obligated to maintain confidentiality with regard to the reporter of an incident.
Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good
faith may face temporary or permanent repercussions as determined by other
members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
[homepage]: https://www.contributor-covenant.org
For answers to common questions about this code of conduct, see
https://www.contributor-covenant.org/faq

View File

@@ -1,10 +1,59 @@
FROM alpine:latest as certs
RUN apk --update add ca-certificates
# Build assets
FROM node:13-alpine as node
RUN apk add --no-cache git openssh python make g++ util-linux
WORKDIR /build
# Install dependencies
COPY package*.json yarn.lock ./
RUN yarn install --network-timeout 1000000
# Copy config files
COPY .* ./
# Copy assets to build
COPY assets ./assets
# Do the build
RUN yarn build
FROM golang:1.14-alpine AS builder
RUN apk add --no-cache git ca-certificates
RUN mkdir /dozzle
WORKDIR /dozzle
# Needed for assets
RUN go get -u github.com/gobuffalo/packr/packr
# Copy go mod files
COPY go.* ./
RUN go mod download
# Copy assets built with node
COPY --from=node /build/static ./static
# Copy all other files
COPY . .
# Compile static files
RUN packr -z
# Args
ARG TAG=dev
# Build binary
RUN CGO_ENABLED=0 go build -ldflags "-s -w -X main.version=$TAG" -o dozzle
FROM scratch
ENV PATH=/bin
ENV DOCKER_API_VERSION 1.38
COPY --from=certs /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY dozzle /
COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/ca-certificates.crt
COPY --from=builder /dozzle/dozzle /dozzle
ENTRYPOINT ["/dozzle"]
EXPOSE 8080

6
Makefile Normal file
View File

@@ -0,0 +1,6 @@
TAG := $(shell git describe --tags)
PLATFROMS := linux/amd64,linux/arm64,linux/arm/v7
.PHONY: publish
publish:
docker buildx build --build-arg TAG=$(TAG) --platform $(PLATFROMS) -t amir20/dozzle:latest -t amir20/dozzle:$(TAG) --push .

View File

@@ -1,14 +1,18 @@
[![Go Report Card](https://goreportcard.com/badge/github.com/amir20/dozzle)](https://goreportcard.com/report/github.com/amir20/dozzle)
[![Docker Pulls](https://img.shields.io/docker/pulls/amir20/dozzle.svg)](https://hub.docker.com/r/amir20/dozzle/)
[![Docker Size](https://images.microbadger.com/badges/image/amir20/dozzle.svg)](https://hub.docker.com/r/amir20/dozzle/)
[![Docker Version](https://images.microbadger.com/badges/version/amir20/dozzle.svg)](https://hub.docker.com/r/amir20/dozzle/)
![Test](https://github.com/amir20/dozzle/workflows/Test/badge.svg)
# dozzle
# Dozzle - [dozzle.dev](https://dozzle.dev/)
Dozzle is a log viewer for Docker. It's free. It's small. And it's right in your browser. Oh, did I mention it is also real-time?
Dozzle is a real-time log viewer for Docker. It's free. It's small. And it's in your browser.
While dozzle should work for most, it is not meant to be a full logging solution. For enterprise use, I recommend you look at [Loggly](https://www.loggly.com), [Papertrail](https://papertrailapp.com) or [Kibana](https://www.elastic.co/products/kibana).
But if you don't want to pay for those services, then you are in luck! Dozzle will be able to capture all logs from your containers and send them in real-time to your browser. Installation is also very easy.
But if you don't want to pay for these services, then Dozzle can help! Dozzle will be able to capture all logs from your containers and send them in real-time to your browser. Installation is also very easy. Dozzle is not a database. It does not store or save any logs. You can only see live logs while using Dozzle.
![Image](demo.gif)
![Image](.github/demo.gif)
## Getting dozzle
@@ -18,12 +22,33 @@ Dozzle is a very small Docker container (4 MB compressed). Pull the latest relea
## Using dozzle
The simplest way to use dozzle is to run the docker container. Also, mount the Docker Unix socket with `-volume` to `/var/run/docker.sock`:
The simplest way to use dozzle is to run the docker container. Also, mount the Docker Unix socket with `--volume` to `/var/run/docker.sock`:
$ docker run --name dozzle -d --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:8080 amir20/dozzle:latest
dozzle will be available at [http://localhost:8888/](http://localhost:8888/). You can change `-p 8888:8080` to any port. For example, if you want to view dozzle over port 4040 then you would do `-p 4040:8080`.
### With Docker swarm
docker service create \
--name=dozzle \
--publish=8888:8080 \
--constraint=node.role==manager \
--mount=type=bind,src=/var/run/docker.sock,dst=/var/run/docker.sock \
amir20/dozzle:latest
### With Docker compose
version: "3"
services:
dozzle:
container_name: dozzle
image: amir20/dozzle:latest
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- 9999:8080
#### Security
dozzle doesn't support authentication out of the box. You can control the device dozzle binds to by passing `--addr` parameter. For example,
@@ -32,28 +57,48 @@ dozzle doesn't support authentication out of the box. You can control the device
will bind to `localhost` on port `1224`. You can then use a reverse proxy to control who can see dozzle.
If you wish to restrict the containers shown you can pass the `--filter` parameter. For example,
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8888:1224 amir20/dozzle:latest --filter name=foo
this would then only allow you to view containers with a name starting with "foo". You can use other filters like `status` as well, please check the official docker [command line docs](https://docs.docker.com/engine/reference/commandline/ps/#filtering) for available filters.
#### Changing base URL
dozzle by default mounts to "/". If you want to control the base path you can use the `--base` option. For example, if you want to mount at "/foobar",
then you can override by using `--base /foobar`.
then you can override by using `--base /foobar`. See env variables below for using `DOZZLE_BASE` to change this.
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -p 8080:8080 amir20/dozzle:latest --base /foobar
dozzle will be available at [http://localhost:8080/foobar/](http://localhost:8080/foobar/).
#### Environment variables and configuration
#### Environment variable, DOCKER_API_VERSION
Dozzle follows the [12-factor](https://12factor.net/) model. Configurations can use the CLI flags or enviroment variables. The table below outlines all supported options and their respective env vars.
If you see
2018/10/31 08:53:17 Error response from daemon: client version 1.40 is too new. Maximum supported API version is 1.38
Then you need to modify `DOCKER_API_VERSION` to let dozzle know which version of the API is supported. By default, `DOCKER_API_VERSION=1.38` and you can change it by passing `-e` flag. For example, this would change the `DOCKER_API_VERSION` to `1.20`
$ docker run --volume=/var/run/docker.sock:/var/run/docker.sock -e DOCKER_API_VERSION=1.20 -p 8888:8080 amir20/dozzle:latest
If you are not sure what to set `DOCKER_API_VERSION` then run `docker version` which will show supported API version.
| Flag | Env Variable | Default |
| ------------ | -------------------- | ------- |
| `--addr` | `DOZZLE_ADDR` | `:8080` |
| `--base` | `DOZZLE_BASE` | `/` |
| `--level` | `DOZZLE_LEVEL` | `info` |
| `--showAll` | `DOZZLE_SHOWALL` | `false` |
| n/a | `DOCKER_API_VERSION` | not set |
| `--tailSize` | `DOZZLE_TAILSIZE` | `300` |
| `--filter` | `DOZZLE_FILTER` | `""` |
## License
[MIT](LICENSE)
## Building
To Build and test locally:
1. Install NodeJs.
2. Install Go.
3. Globally install [packr utility](https://github.com/gobuffalo/packr) with `go get -u github.com/gobuffalo/packr/packr` outside of dozzle directory.
4. Install [reflex](https://github.com/cespare/reflex) with `get -u github.com/cespare/reflex` outside of dozzle.
5. Install node modules with `npm install`.
6. Do `npm start`
Instructions for Github actions can be found [here](.github/goreleaser/Dockerfile) which build and tests Dozzle.

View File

@@ -1,3 +1,32 @@
/* snapshot: Test_createRoutes_foobar */
HTTP/1.1 200 OK
Connection: close
Content-Type: text/plain; charset=utf-8
foo page
/* snapshot: Test_createRoutes_index */
HTTP/1.1 200 OK
Connection: close
Content-Type: text/plain; charset=utf-8
index page
/* snapshot: Test_createRoutes_redirect */
HTTP/1.1 301 Moved Permanently
Connection: close
Content-Type: text/html; charset=utf-8
Location: /foobar/
<a href="/foobar/">Moved Permanently</a>.
/* snapshot: Test_createRoutes_version */
HTTP/1.1 200 OK
Connection: close
Content-Type: text/plain; charset=utf-8
dev
/* snapshot: Test_handler_listContainers_happy */
HTTP/1.1 200 OK
Connection: close
@@ -29,6 +58,14 @@ Content-Type: text/event-stream
event: containers-changed
data: start
/* snapshot: Test_handler_streamLogs_error_finding_container */
HTTP/1.1 500 Internal Server Error
Connection: close
Content-Type: text/plain; charset=utf-8
X-Content-Type-Options: nosniff
error finding container
/* snapshot: Test_handler_streamLogs_error_reading */
HTTP/1.1 200 OK
Connection: close

51
assets/App.spec.js Normal file
View File

@@ -0,0 +1,51 @@
import EventSource from "eventsourcemock";
import { shallowMount, RouterLinkStub, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import App from "./App";
const localVue = createLocalVue();
localVue.use(Vuex);
describe("<App />", () => {
const stubs = { RouterLink: RouterLinkStub, "router-view": true, icon: true };
let store;
beforeEach(() => {
global.BASE_PATH = "";
global.EventSource = EventSource;
const state = {
containers: [
{ id: "abc", name: "Test 1" },
{ id: "xyz", name: "Test 2" },
],
settings: { menuWidth: 15 },
};
const actions = {
FETCH_CONTAINERS: () => Promise.resolve(),
};
store = new Vuex.Store({
state,
actions,
});
});
test("is a Vue instance", async () => {
const wrapper = shallowMount(App, { stubs, store, localVue });
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("has right title", async () => {
const wrapper = shallowMount(App, { stubs, store, localVue });
await wrapper.vm.$nextTick();
expect(wrapper.vm.title).toContain("2 containers");
});
test("renders correctly", async () => {
const wrapper = shallowMount(App, { stubs, store, localVue });
await wrapper.vm.$nextTick();
expect(wrapper.element).toMatchSnapshot();
});
});

View File

@@ -1,102 +1,150 @@
<template lang="html">
<div class="columns is-marginless">
<aside class="column menu is-2-desktop is-3-tablet">
<a
role="button"
class="navbar-burger burger is-white is-hidden-tablet is-pulled-right"
@click="showNav = !showNav;"
:class="{ 'is-active': showNav }"
>
<span></span> <span></span> <span></span>
</a>
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
<p class="menu-label is-hidden-mobile" :class="{ 'is-active': showNav }">Containers</p>
<ul class="menu-list is-hidden-mobile" :class="{ 'is-active': showNav }">
<li v-for="item in containers">
<router-link :to="{ name: 'container', params: { id: item.id, name: item.name } }" active-class="is-active">
<div class="hide-overflow">{{ item.name }}</div>
</router-link>
</li>
</ul>
</aside>
<div class="column is-offset-2-desktop is-offset-3-tablet"><router-view></router-view></div>
<vue-headful :title="title" />
</div>
<main>
<mobile-menu v-if="isMobile"></mobile-menu>
<splitpanes @resized="onResized($event)">
<pane min-size="10" :size="settings.menuWidth" v-if="!isMobile && !collapseNav">
<side-menu></side-menu>
</pane>
<pane min-size="10">
<splitpanes>
<pane class="has-min-height">
<search></search>
<router-view></router-view>
</pane>
<pane v-for="other in activeContainers" :key="other.id" v-if="!isMobile">
<scrollable-view>
<template v-slot:header>
<container-title :value="other.name" closable @close="removeActiveContainer(other)"></container-title>
</template>
<log-viewer-with-source :id="other.id"></log-viewer-with-source>
</scrollable-view>
</pane>
</splitpanes>
</pane>
</splitpanes>
<button
@click="collapseNav = !collapseNav"
class="button is-small is-rounded is-settings-control"
:class="{ collapsed: collapseNav }"
id="hide-nav"
v-if="!isMobile"
>
<span class="icon">
<icon :name="collapseNav ? 'chevron-right' : 'chevron-left'"></icon>
</span>
</button>
</main>
</template>
<script>
let es;
import { mapActions, mapGetters, mapState } from "vuex";
import { Splitpanes, Pane } from "splitpanes";
import LogViewerWithSource from "./components/LogViewerWithSource";
import ScrollableView from "./components/ScrollableView";
import SideMenu from "./components/SideMenu";
import MobileMenu from "./components/MobileMenu";
import Search from "./components/Search";
import ContainerTitle from "./components/ContainerTitle";
import Icon from "./components/Icon";
export default {
name: "App",
components: {
Icon,
LogViewerWithSource,
SideMenu,
MobileMenu,
ScrollableView,
Splitpanes,
Pane,
Search,
ContainerTitle,
},
data() {
return {
title: "Dozzle",
containers: [],
showNav: false
title: "",
collapseNav: false,
};
},
metaInfo() {
return {
title: this.title,
titleTemplate: "%s - Dozzle",
};
},
async created() {
await this.fetchContainerList();
this.title = `${this.containers.length} containers - Dozzle`;
es = new EventSource(`${BASE_PATH}/api/events/stream`);
es.addEventListener("containers-changed", e => setTimeout(this.fetchContainerList, 1000), false);
this.title = `${this.containers.length} containers`;
},
beforeDestroy() {
if (es) {
es.close();
es = null;
mounted() {
if (this.hasSmallerScrollbars) {
document.documentElement.classList.add("has-custom-scrollbars");
}
this.menuWidth = this.settings.menuWidth;
},
watch: {
hasSmallerScrollbars(newValue, oldValue) {
if (newValue) {
document.documentElement.classList.add("has-custom-scrollbars");
} else {
document.documentElement.classList.remove("has-custom-scrollbars");
}
},
},
computed: {
...mapState(["containers", "activeContainers", "isMobile", "settings"]),
hasSmallerScrollbars() {
return this.settings.smallerScrollbars;
},
},
methods: {
async fetchContainerList() {
this.containers = await (await fetch(`${BASE_PATH}/api/containers.json`)).json();
}
}
...mapActions({
fetchContainerList: "FETCH_CONTAINERS",
removeActiveContainer: "REMOVE_ACTIVE_CONTAINER",
updateSetting: "UPDATE_SETTING",
}),
onResized(e) {
if (e.length == 2) {
const menuWidth = e[0].size;
this.updateSetting({ menuWidth });
}
},
},
};
</script>
<style scoped lang="scss">
.is-hidden-mobile.is-active {
display: block !important;
::v-deep .splitpanes__splitter {
min-width: 4px;
background: #666;
&:hover {
background: rgb(255, 221, 87);
}
}
.navbar-burger {
height: 2.35rem;
.button.has-no-border {
border-color: transparent !important;
}
aside {
.has-min-height {
min-height: 100vh;
}
#hide-nav {
position: fixed;
z-index: 2;
padding: 1em;
left: 10px;
bottom: 10px;
&.collapsed {
left: -40px;
width: 60px;
padding-left: 40px;
background: rgba(0, 0, 0, 0.95);
@media screen and (min-width: 769px) {
& {
height: 100vh;
overflow: auto;
&:hover {
left: -25px;
}
}
@media screen and (max-width: 768px) {
& {
position: sticky;
top: 0;
left: 0;
right: 0;
background: #222;
}
.menu-label {
margin-top: 1em;
}
}
}
.hide-overflow {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.burger.is-white {
color: #fff;
}
</style>

View File

@@ -0,0 +1,54 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<App /> renders correctly 1`] = `
<main>
<!---->
<splitpanes-stub
dblclicksplitter="true"
pushotherpanes="true"
>
<pane-stub
maxsize="100"
minsize="10"
size="15"
>
<side-menu-stub />
</pane-stub>
<pane-stub
maxsize="100"
minsize="10"
>
<splitpanes-stub
dblclicksplitter="true"
pushotherpanes="true"
>
<pane-stub
class="has-min-height"
maxsize="100"
minsize="0"
>
<search-stub />
<router-view-stub />
</pane-stub>
</splitpanes-stub>
</pane-stub>
</splitpanes-stub>
<button
class="button is-small is-rounded is-settings-control"
id="hide-nav"
>
<span
class="icon"
>
<icon-stub
name="chevron-left"
/>
</span>
</button>
</main>
`;

View File

@@ -0,0 +1,30 @@
<template lang="html">
<div class="name columns is-marginless">
<span class="column">{{ value }}</span>
<span class="column is-narrow" v-if="closable">
<button class="delete is-medium" @click="$emit('close')"></button>
</span>
</div>
</template>
<script>
export default {
props: {
value: String,
closable: {
type: Boolean,
default: false,
},
},
name: "ContainerTitle",
};
</script>
<style lang="scss" scoped>
.name {
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
background: rgba(0, 0, 0, 0.1);
font-weight: bold;
font-family: monospace;
}
</style>

View File

@@ -0,0 +1,33 @@
<template>
<svg class="icomoon" :class="['icon-' + name]">
<use :href="'#icon-' + name"></use>
</svg>
</template>
<script>
export default {
functional: true,
props: {
name: {
required: true,
type: String,
},
},
name: "Icon",
};
</script>
<style lang="scss" scoped>
.icomoon {
display: inline-block;
width: 1em;
height: 1em;
stroke-width: 0;
stroke: currentColor;
fill: currentColor;
.icon:not(.keep-size) & {
width: 100%;
height: 100%;
}
}
</style>

View File

@@ -0,0 +1,37 @@
<template lang="html">
<div ref="observer" class="control" :class="{ 'is-loading': isLoading }"></div>
</template>
<script>
export default {
name: "InfiniteLoader",
data() {
return {
isLoading: false,
};
},
props: {
onLoadMore: Function,
enabled: Boolean,
},
mounted() {
const intersectionObserver = new IntersectionObserver(
async (entries) => {
if (entries[0].intersectionRatio <= 0) return;
if (this.onLoadMore && this.enabled) {
const scrollingParent = this.$el.closest("[data-scrolling]") || document.documentElement;
const previousHeight = scrollingParent.scrollHeight;
this.isLoading = true;
await this.onLoadMore();
this.isLoading = false;
this.$nextTick(() => (scrollingParent.scrollTop += scrollingParent.scrollHeight - previousHeight));
}
},
{ threshholds: 1 }
);
intersectionObserver.observe(this.$refs.observer);
},
};
</script>
<style scoped lang="scss"></style>

View File

@@ -0,0 +1,203 @@
import debounce from "lodash.debounce";
import EventSource from "eventsourcemock";
import { sources } from "eventsourcemock";
import { shallowMount, mount, createLocalVue } from "@vue/test-utils";
import Vuex from "vuex";
import MockDate from "mockdate";
import LogEventSource from "./LogEventSource.vue";
import LogViewer from "./LogViewer.vue";
jest.mock("lodash.debounce", () =>
jest.fn((fn) => {
return fn;
})
);
describe("<LogEventSource />", () => {
beforeEach(() => {
global.BASE_PATH = "";
global.EventSource = EventSource;
MockDate.set("6/12/2019", 0);
window.scrollTo = jest.fn();
const observe = jest.fn();
const unobserve = jest.fn();
global.IntersectionObserver = jest.fn(() => ({
observe,
unobserve,
}));
debounce.mockClear();
});
afterEach(() => MockDate.reset());
function createLogEventSource(searchFilter = null) {
const localVue = createLocalVue();
localVue.use(Vuex);
localVue.component("log-viewer", LogViewer);
const state = { searchFilter, settings: { size: "medium", showTimestamp: true } };
const store = new Vuex.Store({
state,
});
return mount(LogEventSource, {
localVue,
store,
scopedSlots: {
default: `
<log-viewer :messages="props.messages"></log-viewer>
`,
},
propsData: { id: "abc" },
});
}
test("is a Vue instance", async () => {
const wrapper = shallowMount(LogEventSource);
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("renders correctly", async () => {
const wrapper = createLogEventSource();
expect(wrapper.element).toMatchInlineSnapshot(`
<div>
<div
class="control"
/>
<ul
class="events medium"
/>
</div>
`);
});
test("should connect to EventSource", async () => {
shallowMount(LogEventSource);
sources["/api/logs/stream?id=abc"].emitOpen();
expect(sources["/api/logs/stream?id=abc"].readyState).toBe(1);
});
test("should close EventSource", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
wrapper.destroy();
expect(sources["/api/logs/stream?id=abc"].readyState).toBe(2);
});
test("should parse messages", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
const [message, _] = wrapper.vm.messages;
const { key, ...messageWithoutKey } = message;
expect(key).toBe("2019-06-12T10:55:42.459034602Z");
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2019-06-12T10:55:42.459Z,
"message": "\\"This is a message.\\"",
}
`);
});
test("should parse messages with loki's timestamp format", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2020-04-27T12:35:43.272974324+02:00 xxxxx` });
const [message, _] = wrapper.vm.messages;
const { key, ...messageWithoutKey } = message;
expect(key).toBe("2020-04-27T12:35:43.272974324+02:00");
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2020-04-27T10:35:43.272Z,
"message": "xxxxx",
}
`);
});
test("should pass messages to slot", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
const [message, _] = wrapper.find(LogViewer).vm.messages;
const { key, ...messageWithoutKey } = message;
expect(key).toBe("2019-06-12T10:55:42.459034602Z");
expect(messageWithoutKey).toMatchInlineSnapshot(`
Object {
"date": 2019-06-12T10:55:42.459Z,
"message": "\\"This is a message.\\"",
}
`);
});
test("should render messages", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({ data: `2019-06-12T10:55:42.459034602Z "This is a message."` });
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">"This is a message."</span></li>
</ul>
`);
});
test("should render messages with color", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z \x1b[30mblack\x1b[37mwhite`,
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text"><span style="color:#000">black<span style="color:#AAA">white</span></span></span></li>
</ul>
`);
});
test("should render messages with html entities", async () => {
const wrapper = createLogEventSource();
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z <test>foo bar</test>`,
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">&lt;test&gt;foo bar&lt;/test&gt;</span></li>
</ul>
`);
});
test("should render messages with filter", async () => {
const wrapper = createLogEventSource("test");
sources["/api/logs/stream?id=abc"].emitOpen();
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-11T10:55:42.459034602Z Foo bar`,
});
sources["/api/logs/stream?id=abc"].emitMessage({
data: `2019-06-12T10:55:42.459034602Z This is a test <hi></hi>`,
});
await wrapper.vm.$nextTick();
expect(wrapper.find("ul.events")).toMatchInlineSnapshot(`
<ul class="events medium">
<li><span class="date">today at 10:55 AM</span> <span class="text">This is a <mark>test</mark> &lt;hi&gt;&lt;/hi&gt;</span></li>
</ul>
`);
});
});

View File

@@ -0,0 +1,88 @@
<template lang="html">
<div>
<infinite-loader :onLoadMore="loadOlderLogs" :enabled="messages.length > 100"></infinite-loader>
<slot :messages="messages"></slot>
</div>
</template>
<script>
import debounce from "lodash.debounce";
import InfiniteLoader from "./InfiniteLoader";
export default {
props: ["id"],
name: "LogEventSource",
components: {
InfiniteLoader,
},
data() {
return {
messages: [],
buffer: [],
};
},
created() {
this.es = null;
this.loadLogs(this.id);
},
methods: {
loadLogs(id) {
if (this.es) {
this.es.close();
this.messages = [];
this.es = null;
}
this.es = new EventSource(`${BASE_PATH}/api/logs/stream?id=${this.id}`);
const flushBuffer = debounce(
() => {
this.messages.push(...this.buffer);
this.buffer = [];
},
250,
{ maxWait: 1000 }
);
this.es.onmessage = (e) => {
this.buffer.push(this.parseMessage(e.data));
flushBuffer();
};
this.es.onerror = (e) => console.log("EventSource failed." + e);
this.$once("hook:beforeDestroy", () => this.es.close());
},
async loadOlderLogs() {
if (this.messages.length < 300) return;
const to = this.messages[0].date;
const last = this.messages[299].date;
const delta = to - last;
const from = new Date(to.getTime() + delta);
const logs = await (
await fetch(`/api/logs?id=${this.id}&from=${from.toISOString()}&to=${to.toISOString()}`)
).text();
if (logs) {
const newMessages = logs
.trim()
.split("\n")
.map((line) => this.parseMessage(line));
this.messages.unshift(...newMessages);
}
},
parseMessage(data) {
let i = data.indexOf(" ");
if (i == -1) {
i = data.length;
}
const key = data.substring(0, i);
const date = new Date(key);
const message = data.substring(i).trim();
return { key, date, message };
},
},
watch: {
id(newValue, oldValue) {
if (oldValue !== newValue) {
this.loadLogs(newValue);
}
},
},
};
</script>

View File

@@ -0,0 +1,114 @@
<template lang="html">
<ul class="events" :class="settings.size">
<li v-for="item in filtered" :key="item.key">
<span class="date" v-if="settings.showTimestamp">{{ item.date | relativeTime }}</span>
<span class="text" v-html="colorize(item.message)"></span>
</li>
</ul>
</template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
import { formatRelative } from "date-fns";
import AnsiConvertor from "ansi-to-html";
const ansiConvertor = new AnsiConvertor({ escapeXML: true });
export default {
props: ["messages"],
name: "LogViewer",
components: {},
data() {
return {
showSearch: false,
};
},
methods: {
colorize: function (value) {
return ansiConvertor.toHtml(value).replace("&lt;mark&gt;", "<mark>").replace("&lt;/mark&gt;", "</mark>");
},
},
computed: {
...mapState(["searchFilter", "settings"]),
filtered() {
const { searchFilter, messages } = this;
if (searchFilter) {
const isSmartCase = searchFilter === searchFilter.toLowerCase();
try {
const regex = isSmartCase ? new RegExp(searchFilter, "i") : new RegExp(searchFilter);
return messages
.filter((d) => d.message.match(regex))
.map((d) => ({
...d,
message: d.message.replace(regex, "<mark>$&</mark>"),
}));
} catch (e) {
if (e instanceof SyntaxError) {
console.info(`Ignoring SytaxError from search.`, e);
return messages;
}
throw e;
}
}
return messages;
},
},
filters: {
relativeTime(date) {
return formatRelative(date, new Date());
},
},
};
</script>
<style scoped lang="scss">
.events {
padding: 10px;
font-family: "Roboto Mono", monaco, monospace;
& > li {
word-wrap: break-word;
line-height: 130%;
&:last-child {
scroll-snap-align: end;
scroll-margin-block-end: 5rem;
}
}
&.small {
font-size: 60%;
}
&.medium {
font-size: 80%;
}
&.large {
font-size: 120%;
}
}
.date {
background-color: #262626;
color: #258ccd;
}
.text {
white-space: pre-wrap;
}
::v-deep mark {
border-radius: 2px;
background-color: #ffdd57;
animation: pops 0.2s ease-out;
display: inline-block;
}
@keyframes pops {
0% {
transform: scale(1.5);
}
100% {
transform: scale(1.05);
}
}
</style>

View File

@@ -0,0 +1,19 @@
<template lang="html">
<log-event-source :id="id" v-slot="eventSource">
<log-viewer :messages="eventSource.messages"></log-viewer>
</log-event-source>
</template>
<script>
import LogEventSource from "./LogEventSource";
import LogViewer from "./LogViewer";
export default {
props: ["id"],
name: "LogViewerWithSource",
components: {
LogEventSource,
LogViewer,
},
};
</script>

View File

@@ -0,0 +1,88 @@
<template lang="html">
<aside>
<a
role="button"
class="navbar-burger burger is-white is-hidden-tablet is-pulled-right"
@click="showNav = !showNav"
:class="{ 'is-active': showNav }"
>
<span></span> <span></span> <span></span>
</a>
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
<p class="menu-label is-hidden-mobile" :class="{ 'is-active': showNav }">Containers</p>
<ul class="menu-list is-hidden-mobile" :class="{ 'is-active': showNav }">
<li v-for="item in containers">
<router-link
:to="{ name: 'container', params: { id: item.id, name: item.name } }"
active-class="is-active"
:title="item.name"
>
<div class="hide-overflow">
{{ item.name }}
</div>
</router-link>
</li>
</ul>
</aside>
</template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
export default {
props: [],
name: "MobileMenu",
data() {
return {
showNav: false,
};
},
computed: {
...mapState(["containers"]),
...mapGetters(["activeContainersById"]),
},
methods: {
...mapActions({}),
},
watch: {
$route(to, from) {
this.showNav = false;
},
},
};
</script>
<style scoped lang="scss">
aside {
padding: 1em;
position: fixed;
top: 0;
left: 0;
right: 0;
background: #222;
z-index: 2;
max-height: 100vh;
overflow: auto;
.menu-label {
margin-top: 1em;
}
.hide-overflow {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.burger.is-white {
color: #fff;
}
.is-hidden-mobile.is-active {
display: block !important;
}
.navbar-burger {
height: 2.35rem;
}
}
</style>

View File

@@ -0,0 +1,104 @@
<template lang="html">
<section :class="{ 'is-full-height-scrollable': scrollable }">
<header v-if="$slots.header">
<slot name="header"></slot>
</header>
<main ref="content" :data-scrolling="scrollable">
<slot></slot>
<div ref="scrollObserver"></div>
</main>
<div class="scroll-bar-notification">
<transition name="fade">
<button
class="button"
:class="hasMore ? 'is-warning' : 'is-primary'"
@click="scrollToBottom('instant')"
v-show="paused"
>
<icon name="download"></icon>
</button>
</transition>
</div>
</section>
</template>
<script>
import Icon from "./Icon";
export default {
props: {
scrollable: {
type: Boolean,
default: true,
},
},
components: {
Icon,
},
name: "ScrollableView",
data() {
return {
paused: false,
hasMore: false,
};
},
mounted() {
const { content } = this.$refs;
new MutationObserver((e) => {
if (!this.paused) {
this.scrollToBottom("instant");
} else {
this.hasMore = true;
}
}).observe(content, { childList: true, subtree: true });
const intersectionObserver = new IntersectionObserver(
(entries) => (this.paused = entries[0].intersectionRatio == 0),
{ threshholds: [0, 1], rootMargin: "80px 0px" }
);
intersectionObserver.observe(this.$refs.scrollObserver);
},
methods: {
scrollToBottom(behavior = "instant") {
this.$refs.scrollObserver.scrollIntoView({ behavior });
this.hasMore = false;
},
},
};
</script>
<style scoped lang="scss">
section {
display: flex;
flex-direction: column;
&.is-full-height-scrollable {
height: 100vh;
}
main {
flex: 1;
overflow: auto;
scroll-snap-type: y proximity;
}
.scroll-bar-notification {
text-align: right;
margin-right: 65px;
button {
position: fixed;
bottom: 30px;
}
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.15s ease-in;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
}
</style>

View File

@@ -1,71 +0,0 @@
<template lang="html">
<transition name="fade">
<button
class="button scroll-notification"
:class="hasNew ? 'is-warning' : 'is-primary'"
@click="scrollToBottom"
v-show="visible"
>
<span class="icon large"> <i class="fas fa-chevron-down"></i> </span>
</button>
</transition>
</template>
<script>
export default {
props: ["messages"],
data() {
return {
visible: false,
hasNew: false
};
},
mounted() {
document.addEventListener("scroll", this.onScroll, { passive: true });
setTimeout(() => this.scrollToBottom(), 500);
},
beforeDestroy() {
document.removeEventListener("scroll", this.onScroll);
},
methods: {
scrollToBottom() {
this.visible = false;
window.scrollTo(0, document.documentElement.scrollHeight || document.body.scrollHeight);
},
onScroll() {
const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
const scrollBottom =
(document.documentElement.scrollHeight || document.body.scrollHeight) - document.documentElement.clientHeight;
const diff = Math.abs(scrollTop - scrollBottom);
this.visible = diff > 50;
if (!this.visible) {
this.hasNew = false;
}
}
},
watch: {
messages(newValue, oldValue) {
if (this.visible) {
this.hasNew = true;
} else {
this.scrollToBottom();
}
}
}
};
</script>
<style scoped>
.scroll-notification {
position: fixed;
right: 40px;
bottom: 30px;
}
.fade-enter-active,
.fade-leave-active {
transition: opacity 0.15s ease-in;
}
.fade-enter,
.fade-leave-to {
opacity: 0;
}
</style>

View File

@@ -0,0 +1,91 @@
<template lang="html">
<div class="search columns is-gapless is-vcentered" v-show="showSearch" v-if="settings.search">
<div class="column">
<p class="control has-icons-left">
<input
class="input"
type="text"
placeholder="Find / RegEx"
ref="filter"
v-model="filter"
@keyup.esc="resetSearch()"
/>
<span class="icon is-left">
<icon name="search"></icon>
</span>
</p>
</div>
<div class="column is-1 has-text-centered">
<button class="delete is-medium" @click="resetSearch()"></button>
</div>
</div>
</template>
<script>
import { mapActions, mapState } from "vuex";
import hotkeys from "hotkeys-js";
import Icon from "./Icon";
export default {
props: [],
name: "Search",
components: {
Icon,
},
data() {
return {
showSearch: false,
};
},
mounted() {
hotkeys("command+f, ctrl+f", (event, handler) => {
this.showSearch = true;
this.$nextTick(() => this.$refs.filter.focus() || this.$refs.filter.select());
event.preventDefault();
});
hotkeys("esc", (event, handler) => {
this.resetSearch();
});
},
methods: {
...mapActions({
updateSearchFilter: "SET_SEARCH",
}),
resetSearch() {
this.showSearch = false;
this.filter = "";
},
},
computed: {
...mapState(["searchFilter", "settings"]),
filter: {
get() {
return this.searchFilter;
},
set(value) {
this.updateSearchFilter(value);
},
},
},
};
</script>
<style lang="scss" scoped>
.search {
width: 350px;
position: fixed;
padding: 10px;
background: rgba(50, 50, 50, 0.9);
top: 0;
right: 0;
border-radius: 0 0 0 5px;
z-index: 10;
}
.delete {
margin-left: 1em;
}
.icon {
padding: 10px 3px;
}
</style>

View File

@@ -0,0 +1,101 @@
<template lang="html">
<aside>
<div class="columns is-marginless">
<div class="column">
<h1 class="title has-text-warning is-marginless">Dozzle</h1>
</div>
<div class="column is-narrow has-text-right is-hidden-mobile">
<router-link
:to="{ name: 'settings' }"
active-class="is-active"
class="button is-small is-rounded is-settings-control"
>
<span class="icon">
<icon name="cog"></icon>
</span>
</router-link>
</div>
</div>
<p class="menu-label is-hidden-mobile">Containers</p>
<ul class="menu-list is-hidden-mobile">
<li v-for="item in containers">
<router-link
:to="{ name: 'container', params: { id: item.id, name: item.name } }"
active-class="is-active"
:title="item.name"
>
<div class="hide-overflow">
<span
@click.stop.prevent="appendActiveContainer(item)"
class="icon is-small will-append-container"
:class="{ 'is-active': activeContainersById[item.id] }"
>
<icon name="pin"></icon>
</span>
{{ item.name }}
</div>
</router-link>
</li>
</ul>
</aside>
</template>
<script>
import { mapActions, mapGetters, mapState } from "vuex";
import Icon from "./Icon";
export default {
props: [],
name: "SideMenu",
components: {
Icon,
},
data() {
return {};
},
computed: {
...mapState(["containers", "activeContainers"]),
...mapGetters(["activeContainersById"]),
},
methods: {
...mapActions({
appendActiveContainer: "APPEND_ACTIVE_CONTAINER",
}),
},
};
</script>
<style scoped lang="scss">
aside {
padding: 1em;
height: 100vh;
overflow: auto;
position: fixed;
width: inherit;
.hide-overflow {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.burger.is-white {
color: #fff;
}
.is-hidden-mobile.is-active {
display: block !important;
}
}
.will-append-container.icon {
transition: transform 0.2s ease-out;
&.is-active {
pointer-events: none;
color: #00d1b2;
}
.router-link-exact-active & {
visibility: hidden;
}
}
</style>

BIN
assets/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

View File

@@ -7,13 +7,67 @@
<link href="https://fonts.googleapis.com/css?family=Roboto|Roboto+Mono|Gafata" rel="stylesheet" />
<link rel="manifest" href="manifest.webmanifest" />
<link href="styles.scss" rel="stylesheet" />
<link rel="icon" href="favicon.ico" />
<script>
window["BASE_PATH"] = "{{ .Base }}";
window["VERSION"] = "{{ .Version }}";
</script>
<script defer src="https://use.fontawesome.com/releases/v5.3.1/js/all.js"></script>
</head>
<body class="is-dark">
<body>
<svg
aria-hidden="true"
style="position: absolute; width: 0; height: 0; overflow: hidden;"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<defs>
<symbol id="icon-check" viewBox="0 0 24 24">
<path
d="M19.293 5.293l-10.293 10.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414l5 5c0.391 0.391 1.024 0.391 1.414 0l11-11c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0z"
></path>
</symbol>
<symbol id="icon-chevron-down" viewBox="0 0 24 24">
<path
d="M5.293 9.707l6 6c0.391 0.391 1.024 0.391 1.414 0l6-6c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-5.293 5.293-5.293-5.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
></path>
</symbol>
<symbol id="icon-chevron-left" viewBox="0 0 24 24">
<path
d="M15.707 17.293l-5.293-5.293 5.293-5.293c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-6 6c-0.391 0.391-0.391 1.024 0 1.414l6 6c0.391 0.391 1.024 0.391 1.414 0s0.391-1.024 0-1.414z"
></path>
</symbol>
<symbol id="icon-chevron-right" viewBox="0 0 24 24">
<path
d="M9.707 18.707l6-6c0.391-0.391 0.391-1.024 0-1.414l-6-6c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414l5.293 5.293-5.293 5.293c-0.391 0.391-0.391 1.024 0 1.414s1.024 0.391 1.414 0z"
></path>
</symbol>
<symbol id="icon-chevrons-down" viewBox="0 0 24 24">
<path
d="M6.293 13.707l5 5c0.391 0.391 1.024 0.391 1.414 0l5-5c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-4.293 4.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414zM6.293 6.707l5 5c0.391 0.391 1.024 0.391 1.414 0l5-5c0.391-0.391 0.391-1.024 0-1.414s-1.024-0.391-1.414 0l-4.293 4.293-4.293-4.293c-0.391-0.391-1.024-0.391-1.414 0s-0.391 1.024 0 1.414z"
></path>
</symbol>
<symbol id="icon-download" viewBox="0 0 24 24">
<path d="M15.6 9.6v-7.2h-7.2v7.2h-6l9.6 9.6 9.6-9.6h-6zM0 21.6h24v2.4h-24v-2.4z"></path>
</symbol>
<symbol id="icon-pin" viewBox="0 0 24 24">
<path
d="M13.2 14.4h7.2v-1.2l-3.6-1.2v-9.6l3.6-1.2v-1.2h-16.8v1.2l3.6 1.2v9.6l-3.6 1.2v1.2h7.2v8.4l1.2 1.2 1.2-1.2v-8.4z"
></path>
</symbol>
<symbol id="icon-search" viewBox="0 0 24 24">
<path
d="M15.48 17.184c-1.608 1.259-3.66 2.019-5.889 2.019-5.302 0-9.6-4.298-9.6-9.6s4.298-9.6 9.6-9.6c5.302 0 9.6 4.298 9.6 9.6 0 2.229-0.76 4.281-2.035 5.91l0.016-0.021 6.42 6.396-1.704 1.704-6.396-6.408zM9.6 16.8c3.976 0 7.2-3.224 7.2-7.2s-3.224-7.2-7.2-7.2v0c-3.976 0-7.2 3.224-7.2 7.2s3.224 7.2 7.2 7.2v0z"
></path>
</symbol>
<symbol id="icon-cog" viewBox="0 0 24 24">
<path
d="M21.886 14.303c-1.259-2.181-0.502-4.976 1.691-6.246l-2.358-4.085c-0.674 0.395-1.457 0.622-2.293 0.622-2.52 0-4.563-2.057-4.563-4.594h-4.717c0.006 0.783-0.189 1.577-0.608 2.303-1.259 2.181-4.058 2.923-6.255 1.658l-2.358 4.085c0.679 0.386 1.267 0.951 1.685 1.675 1.257 2.178 0.504 4.967-1.681 6.24l2.358 4.085c0.671-0.391 1.451-0.615 2.283-0.615 2.512 0 4.55 2.044 4.563 4.569h4.717c-0.002-0.775 0.194-1.56 0.609-2.279 1.257-2.177 4.049-2.92 6.244-1.664l2.358-4.085c-0.675-0.386-1.258-0.949-1.674-1.669zM12 16.859c-2.684 0-4.859-2.176-4.859-4.859s2.176-4.859 4.859-4.859c2.684 0 4.859 2.176 4.859 4.859s-2.176 4.859-4.859 4.859z"
></path>
</symbol>
</defs>
</svg>
<div id="app"></div>
<script src="main.js"></script>
</body>

View File

@@ -1,34 +1,45 @@
import Vue from "vue";
import VueRouter from "vue-router";
import vueHeadful from "vue-headful";
import Meta from "vue-meta";
import { Dropdown, Switch } from "buefy";
import store from "./store";
import App from "./App.vue";
import Container from "./pages/Container.vue";
import Settings from "./pages/Settings.vue";
import Index from "./pages/Index.vue";
Vue.use(VueRouter);
Vue.component("vue-headful", vueHeadful);
Vue.use(Meta);
Vue.use(Dropdown);
Vue.use(Switch);
const routes = [
{
path: "/",
component: Index,
name: "default"
name: "default",
},
{
path: "/container/:id",
component: Container,
name: "container",
props: true
}
props: true,
},
{
path: "/settings",
component: Settings,
name: "settings",
},
];
const router = new VueRouter({
mode: "history",
base: BASE_PATH + "/",
routes
routes,
});
new Vue({
router,
render: h => h(App)
store,
render: (h) => h(App),
}).$mount("#app");

View File

@@ -1,94 +1,53 @@
<template lang="html">
<div class="is-fullheight">
<ul ref="events" class="events">
<li v-for="item in messages" class="event" :key="item.key">
<span class="date">{{ item.dateRelative }}</span> <span class="text">{{ item.message }}</span>
</li>
</ul>
<scrollbar-notification :messages="messages"></scrollbar-notification>
<vue-headful :title="title" />
</div>
<scrollable-view :scrollable="activeContainers.length > 0">
<template v-slot:header v-if="activeContainers.length > 0">
<container-title :value="allContainersById[id].name"></container-title>
</template>
<log-viewer-with-source :id="id"></log-viewer-with-source>
</scrollable-view>
</template>
<script>
import { formatRelative } from "date-fns";
import ScrollbarNotification from "../components/ScrollbarNotification";
import { mapActions, mapGetters, mapState } from "vuex";
let es = null;
let nextId = 0;
const parseMessage = data => {
const date = new Date(data.substring(0, 30));
const dateRelative = formatRelative(date, new Date());
const message = data.substring(30);
const key = nextId++;
return {
key,
date,
dateRelative,
message
};
};
import LogViewerWithSource from "../components/LogViewerWithSource";
import ScrollableView from "../components/ScrollableView";
import ContainerTitle from "../components/ContainerTitle";
export default {
props: ["id", "name"],
name: "Container",
components: {
ScrollbarNotification
LogViewerWithSource,
ScrollableView,
ContainerTitle,
},
data() {
return {
messages: [],
title: ""
title: "loading",
};
},
created() {
this.loadLogs(this.id);
metaInfo() {
return {
title: this.title,
};
},
beforeDestroy() {
if (es) {
es.close();
es = null;
mounted() {
if (this.allContainersById[this.id]) {
this.title = this.allContainersById[this.id].name;
}
},
computed: {
...mapState(["activeContainers"]),
...mapGetters(["allContainersById"]),
},
watch: {
id(newValue, oldValue) {
if (oldValue !== newValue) {
this.loadLogs(newValue);
}
}
id() {
this.title = this.allContainersById[this.id].name;
},
allContainersById() {
this.title = this.allContainersById[this.id].name;
},
},
methods: {
loadLogs(id) {
if (es) {
es.close();
es = null;
this.messages = [];
}
es = new EventSource(`${BASE_PATH}/api/logs/stream?id=${id}`);
es.onmessage = e => this.messages.push(parseMessage(e.data));
this.title = `${this.name} - Dozzle`;
}
}
};
</script>
<style scoped>
.events {
padding: 10px;
font-family: "Roboto Mono", monaco, monospace;
}
.event {
font-size: 13px;
line-height: 16px;
word-wrap: break-word;
}
.date {
background-color: #262626;
color: #258ccd;
}
.is-fullheight {
min-height: 100vh;
}
</style>

View File

@@ -0,0 +1,14 @@
import { shallowMount } from "@vue/test-utils";
import Index from "./Index";
describe("<Index />", () => {
test("is a Vue instance", () => {
const wrapper = shallowMount(Index);
expect(wrapper.isVueInstance()).toBeTruthy();
});
test("renders correctly", () => {
const wrapper = shallowMount(Index);
expect(wrapper.element).toMatchSnapshot();
});
});

View File

@@ -11,7 +11,7 @@
<script>
export default {
props: [],
name: "Default"
name: "Default",
};
</script>
<style scoped>

147
assets/pages/Settings.vue Normal file
View File

@@ -0,0 +1,147 @@
<template lang="html">
<div>
<section class="section">
<div class="has-underline">
<h2 class="title is-4">About</h2>
</div>
<div>
You are using Dozzle <i>{{ currentVersion }}</i
>.
<span v-if="hasUpdate">
New version is available! Update to
<a :href="nextRelease.html_url" class="next-release">{{ nextRelease.name }}</a
>.
</span>
</div>
</section>
<section class="section">
<div class="has-underline">
<h2 class="title is-4">Display</h2>
</div>
<div class="item">
<b-switch v-model="search">
Enable searching with Dozzle using <code>command+f</code> or <code>ctrl+f</code>
</b-switch>
</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 class="item">
<h2 class="title is-6 is-marginless">Font size</h2>
Modify the font size when viewing logs.
<b-dropdown v-model="size" aria-role="list" style="margin: -8px 10px 0;">
<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']">
<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>
</section>
</div>
</template>
<script>
import gt from "semver/functions/gt";
import valid from "semver/functions/valid";
import { mapActions, mapState } from "vuex";
import Icon from "../components/Icon";
export default {
props: [],
name: "Settings",
components: {
Icon,
},
data() {
return {
currentVersion: VERSION,
nextRelease: null,
hasUpdate: false,
};
},
async created() {
const releases = await (await fetch("https://api.github.com/repos/amir20/dozzle/releases")).json();
this.hasUpdate = gt(releases[0].tag_name, this.currentVersion);
this.nextRelease = releases[0];
},
metaInfo() {
return {
title: "Settings",
};
},
methods: {
...mapActions({
updateSetting: "UPDATE_SETTING",
}),
},
computed: {
...mapState(["settings"]),
...["search", "size", "smallerScrollbars", "showTimestamp"].reduce((map, name) => {
map[name] = {
get() {
return this.settings[name];
},
set(value) {
this.updateSetting({ [name]: value });
},
};
return map;
}, {}),
},
};
</script>
<style lang="scss">
.title {
color: #eee;
}
a.next-release {
text-decoration: underline;
color: #00d1b2;
&:hover {
text-decoration: none;
}
}
.section {
padding: 1rem 1.5rem;
}
.has-underline {
border-bottom: 1px solid #fff;
padding: 1em 0px;
margin-bottom: 1em;
}
.item {
padding: 1em 0;
}
code {
border-radius: 4px;
background-color: #444;
}
</style>

View File

@@ -0,0 +1,21 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`<Index /> renders correctly 1`] = `
<div
class="hero is-fullheight is-dark"
>
<div
class="hero-body"
>
<div
class="container has-text-centered"
>
<h1
class="title"
>
Please choose a container from the list to view the logs
</h1>
</div>
</div>
</div>
`;

86
assets/store/index.js Normal file
View File

@@ -0,0 +1,86 @@
import Vue from "vue";
import Vuex from "vuex";
import storage from "store/dist/store.modern";
import { DEFAULT_SETTINGS, DOZZLE_SETTINGS_KEY } from "./settings";
Vue.use(Vuex);
const mql = window.matchMedia("(max-width: 770px)");
storage.set(DOZZLE_SETTINGS_KEY, { ...DEFAULT_SETTINGS, ...storage.get(DOZZLE_SETTINGS_KEY) });
const state = {
containers: [],
activeContainers: [],
searchFilter: null,
isMobile: mql.matches,
settings: storage.get(DOZZLE_SETTINGS_KEY),
};
const mutations = {
SET_CONTAINERS(state, containers) {
state.containers = containers;
},
ADD_ACTIVE_CONTAINERS(state, container) {
state.activeContainers.push(container);
},
REMOVE_ACTIVE_CONTAINER(state, container) {
state.activeContainers.splice(state.activeContainers.indexOf(container), 1);
},
SET_SEARCH(state, filter) {
state.searchFilter = filter;
},
SET_MOBILE_WIDTH(state, value) {
state.isMobile = value;
},
UPDATE_SETTINGS(state, newValues) {
state.settings = { ...state.settings, ...newValues };
storage.set(DOZZLE_SETTINGS_KEY, state.settings);
},
};
const actions = {
APPEND_ACTIVE_CONTAINER({ commit }, container) {
commit("ADD_ACTIVE_CONTAINERS", container);
},
REMOVE_ACTIVE_CONTAINER({ commit }, container) {
commit("REMOVE_ACTIVE_CONTAINER", container);
},
SET_SEARCH({ commit }, filter) {
commit("SET_SEARCH", filter);
},
async FETCH_CONTAINERS({ commit }) {
const containers = await (await fetch(`${BASE_PATH}/api/containers.json`)).json();
commit("SET_CONTAINERS", containers);
},
UPDATE_SETTING({ commit }, setting) {
commit("UPDATE_SETTINGS", setting);
},
};
const getters = {
activeContainersById(state) {
return state.activeContainers.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {});
},
allContainersById(state) {
return state.containers.reduce((map, obj) => {
map[obj.id] = obj;
return map;
}, {});
},
};
const es = new EventSource(`${BASE_PATH}/api/events/stream`);
es.addEventListener("containers-changed", (e) => setTimeout(() => store.dispatch("FETCH_CONTAINERS"), 1000), false);
mql.addListener((e) => store.commit("SET_MOBILE_WIDTH", e.matches));
const store = new Vuex.Store({
state,
getters,
actions,
mutations,
});
export default store;

8
assets/store/settings.js Normal file
View File

@@ -0,0 +1,8 @@
export const DOZZLE_SETTINGS_KEY = "DOZZLE_SETTINGS";
export const DEFAULT_SETTINGS = {
search: true,
size: "medium",
menuWidth: 15,
smallerScrollbars: false,
showTimestamp: true,
};

View File

@@ -3,17 +3,74 @@
$menu-item-active-background-color: hsl(171, 100%, 41%);
$menu-item-color: hsl(0, 6%, 87%);
@import "../node_modules/bulma/bulma.sass";
.is-dark {
color: #ddd;
background-color: #111;
}
@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";
body {
font-family: "Roboto", sans-serif;
font-family: "Roboto", sans-serif;
color: #ddd;
background-color: #111;
}
h1.title {
font-family: "Gafata", sans-serif;
font-family: "Gafata", sans-serif;
}
html {
overflow-x: unset;
overflow-y: unset;
scroll-snap-type: y proximity;
}
html.has-custom-scrollbars {
::-webkit-scrollbar {
width: 8px;
display: content;
}
::-webkit-scrollbar-thumb {
background-color: rgba(128, 128, 128, 0.33);
outline: 1px solid slategrey;
border-radius: 4px;
}
::-webkit-scrollbar-thumb:active {
background-color: #777;
}
::-webkit-scrollbar-track {
background-color: transparent;
}
::-webkit-scrollbar-track:hover {
background-color: rgba(64, 64, 64, 0.33);
}
section main {
scrollbar-color: #353535 transparent;
scrollbar-width: thin;
}
}
.is-settings-control {
background: rgba(0, 0, 0, 0.4);
color: #fff;
border-color: transparent;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
&:hover {
border-color: rgb(255, 221, 87) !important;
background: rgba(0, 0, 0, 0.8) !important;
color: #fff !important;
}
&:focus {
box-shadow: none !important;
color: unset;
border-color: transparent;
}
}

View File

@@ -1,46 +1,96 @@
package docker
import (
"bufio"
"bytes"
"context"
"encoding/binary"
"fmt"
"io"
"sort"
"strconv"
"strings"
"time"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters"
"github.com/docker/docker/client"
"io"
"log"
"sort"
"strings"
log "github.com/sirupsen/logrus"
)
type dockerClient struct {
cli dockerProxy
cli dockerProxy
filters filters.Args
}
type dockerProxy interface {
ContainerList(context.Context, types.ContainerListOptions) ([]types.Container, error)
ContainerLogs(context.Context, string, types.ContainerLogsOptions) (io.ReadCloser, error)
Events(context.Context, types.EventsOptions) (<-chan events.Message, <-chan error)
ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error)
}
// Client is a proxy around the docker client
type Client interface {
ListContainers() ([]Container, error)
ContainerLogs(ctx context.Context, id string) (<-chan string, <-chan error)
Events(ctx context.Context) (<-chan events.Message, <-chan error)
ListContainers(showAll bool) ([]Container, error)
FindContainer(string) (Container, error)
ContainerLogs(context.Context, string, int) (<-chan string, <-chan error)
Events(context.Context) (<-chan events.Message, <-chan error)
ContainerLogsBetweenDates(context.Context, string, time.Time, time.Time) ([]string, error)
}
// NewClient creates a new instance of Client
func NewClient() Client {
cli, err := client.NewClientWithOpts(client.FromEnv)
return NewClientWithFilters(map[string]string{})
}
// NewClientWithFilters creates a new instance of Client with docker filters
func NewClientWithFilters(f map[string]string) Client {
filterArgs := filters.NewArgs()
for k, v := range f {
filterArgs.Add(k, v)
}
log.Debugf("filterArgs = %v", filterArgs)
cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation())
if err != nil {
log.Fatal(err)
}
return &dockerClient{cli}
return &dockerClient{cli, filterArgs}
}
func (d *dockerClient) ListContainers() ([]Container, error) {
list, err := d.cli.ContainerList(context.Background(), types.ContainerListOptions{})
func (d *dockerClient) FindContainer(id string) (Container, error) {
var container Container
containers, err := d.ListContainers(true)
if err != nil {
return container, err
}
found := false
for _, c := range containers {
if c.ID == id {
container = c
found = true
break
}
}
if found == false {
return container, fmt.Errorf("Unable to find container with id: %s", id)
}
return container, nil
}
func (d *dockerClient) ListContainers(showAll bool) ([]Container, error) {
containerListOptions := types.ContainerListOptions{
Filters: d.filters,
All: showAll,
}
list, err := d.cli.ContainerList(context.Background(), containerListOptions)
if err != nil {
return nil, err
}
@@ -73,51 +123,105 @@ func (d *dockerClient) ListContainers() ([]Container, error) {
return containers, nil
}
func (d *dockerClient) ContainerLogs(ctx context.Context, id string) (<-chan string, <-chan error) {
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
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) ContainerLogs(ctx context.Context, id string, tailSize int) (<-chan string, <-chan error) {
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: strconv.Itoa(tailSize), Timestamps: true}
reader, err := d.cli.ContainerLogs(ctx, id, options)
errChannel := make(chan error, 1)
if err != nil {
tmpErrors := make(chan error, 1)
tmpErrors <- err
return nil, tmpErrors
errChannel <- err
close(errChannel)
return nil, errChannel
}
messages := make(chan string)
go func() {
<-ctx.Done()
reader.Close()
}()
messages := make(chan string)
errChannel := make(chan error)
containerJSON, _ := d.cli.ContainerInspect(ctx, id)
go func() {
hdr := make([]byte, 8)
var buffer bytes.Buffer
defer close(messages)
defer close(errChannel)
defer reader.Close()
nextEntry := logReader(reader, containerJSON.Config.Tty)
for {
_, err := reader.Read(hdr)
line, err := nextEntry()
if err != nil {
errChannel <- err
break
}
count := binary.BigEndian.Uint32(hdr[4:])
_, err = io.CopyN(&buffer, reader, int64(count))
if err != nil {
errChannel <- err
break
select {
case messages <- line:
case <-ctx.Done():
}
messages <- buffer.String()
buffer.Reset()
}
close(messages)
close(errChannel)
reader.Close()
}()
return messages, errChannel
}
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) {
options := types.ContainerLogsOptions{
ShowStdout: true,
ShowStderr: true,
Timestamps: true,
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)
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)
}
return messages, nil
}

View File

@@ -1,13 +1,20 @@
package docker
import (
"bytes"
"context"
"encoding/binary"
"errors"
"io"
"io/ioutil"
"testing"
"github.com/docker/docker/api/types"
"github.com/docker/docker/api/types/container"
"github.com/docker/docker/api/types/filters"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/mock"
"github.com/stretchr/testify/require"
"testing"
)
type mockedProxy struct {
@@ -24,12 +31,31 @@ func (m *mockedProxy) ContainerList(context.Context, types.ContainerListOptions)
return containers, args.Error(1)
}
func Test_dockerClient_ListContainers_null(t *testing.T) {
proxy := mockedProxy{}
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, nil)
client := &dockerClient{&proxy}
list, err := client.ListContainers()
func (m *mockedProxy) ContainerLogs(ctx context.Context, id string, options types.ContainerLogsOptions) (io.ReadCloser, error) {
args := m.Called(ctx, id, options)
reader, ok := args.Get(0).(io.ReadCloser)
if !ok && args.Get(0) != nil {
panic("reader is not of type io.ReadCloser")
}
return reader, args.Error(1)
}
func (m *mockedProxy) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) {
args := m.Called(ctx, containerID)
json, ok := args.Get(0).(types.ContainerJSON)
if !ok && args.Get(0) != nil {
panic("proxies return value is not of type types.ContainerJSON")
}
return json, args.Error(1)
}
func Test_dockerClient_ListContainers_null(t *testing.T) {
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, nil)
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers(true)
assert.Empty(t, list, "list should be empty")
require.NoError(t, err, "error should not return an error.")
@@ -37,11 +63,11 @@ func Test_dockerClient_ListContainers_null(t *testing.T) {
}
func Test_dockerClient_ListContainers_error(t *testing.T) {
proxy := mockedProxy{}
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(nil, errors.New("test"))
client := &dockerClient{&proxy}
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers()
list, err := client.ListContainers(true)
assert.Nil(t, list, "list should be nil")
require.Error(t, err, "test.")
@@ -60,11 +86,11 @@ func Test_dockerClient_ListContainers_happy(t *testing.T) {
},
}
proxy := mockedProxy{}
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(containers, nil)
client := &dockerClient{&proxy}
client := &dockerClient{proxy, filters.NewArgs()}
list, err := client.ListContainers()
list, err := client.ListContainers(true)
require.NoError(t, err, "error should not return an error.")
assert.Equal(t, list, []Container{
@@ -82,3 +108,123 @@ func Test_dockerClient_ListContainers_happy(t *testing.T) {
proxy.AssertExpectations(t)
}
func Test_dockerClient_ContainerLogs_happy(t *testing.T) {
id := "123456"
proxy := new(mockedProxy)
expected := "INFO Testing logs..."
b := make([]byte, 8)
binary.BigEndian.PutUint32(b[4:], uint32(len(expected)))
b = append(b, []byte(expected)...)
reader := ioutil.NopCloser(bytes.NewReader(b))
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
proxy.On("ContainerLogs", mock.Anything, id, options).Return(reader, nil)
json := types.ContainerJSON{Config: &container.Config{Tty: false}}
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300)
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
_, ok := <-messages
assert.False(t, ok, "channel should have been closed")
proxy.AssertExpectations(t)
}
func Test_dockerClient_ContainerLogs_happy_with_tty(t *testing.T) {
id := "123456"
proxy := new(mockedProxy)
expected := "INFO Testing logs..."
reader := ioutil.NopCloser(bytes.NewReader([]byte(expected)))
options := types.ContainerLogsOptions{ShowStdout: true, ShowStderr: true, Follow: true, Tail: "300", Timestamps: true}
proxy.On("ContainerLogs", mock.Anything, id, options).Return(reader, nil)
json := types.ContainerJSON{Config: &container.Config{Tty: true}}
proxy.On("ContainerInspect", mock.Anything, id).Return(json, nil)
client := &dockerClient{proxy, filters.NewArgs()}
messages, _ := client.ContainerLogs(context.Background(), id, 300)
actual, _ := <-messages
assert.Equal(t, expected, actual, "message doesn't match expected")
_, ok := <-messages
assert.False(t, ok, "channel should have been closed")
proxy.AssertExpectations(t)
}
func Test_dockerClient_ContainerLogs_error(t *testing.T) {
id := "123456"
proxy := new(mockedProxy)
proxy.On("ContainerLogs", mock.Anything, id, mock.Anything).Return(nil, errors.New("test"))
client := &dockerClient{proxy, filters.NewArgs()}
messages, 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")
proxy.AssertExpectations(t)
}
func Test_dockerClient_FindContainer_happy(t *testing.T) {
containers := []types.Container{
{
ID: "abcdefghijklmnopqrst",
Names: []string{"/z_test_container"},
},
{
ID: "1234567890_abcxyzdef",
Names: []string{"/a_test_container"},
},
}
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(containers, nil)
client := &dockerClient{proxy, filters.NewArgs()}
container, err := client.FindContainer("abcdefghijkl")
require.NoError(t, err, "error should not be thrown")
assert.Equal(t, container, Container{
ID: "abcdefghijkl",
Name: "z_test_container",
Names: []string{"/z_test_container"},
})
proxy.AssertExpectations(t)
}
func Test_dockerClient_FindContainer_error(t *testing.T) {
containers := []types.Container{
{
ID: "abcdefghijklmnopqrst",
Names: []string{"/z_test_container"},
},
{
ID: "1234567890_abcxyzdef",
Names: []string{"/a_test_container"},
},
}
proxy := new(mockedProxy)
proxy.On("ContainerList", mock.Anything, mock.Anything).Return(containers, nil)
client := &dockerClient{proxy, filters.NewArgs()}
_, err := client.FindContainer("not_valid")
require.Error(t, err, "error should be thrown")
proxy.AssertExpectations(t)
}

55
go.mod Normal file
View File

@@ -0,0 +1,55 @@
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/beme/abide v0.0.0-20190723115211-635a09831760
github.com/containerd/containerd v1.3.3 // indirect
github.com/docker/distribution v2.7.1+incompatible // indirect
github.com/docker/docker v0.0.0-20190827232753-32688a47f341
github.com/docker/go-connections v0.4.0 // indirect
github.com/docker/go-units v0.4.0 // 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.3.4 // indirect
github.com/google/go-cmp v0.3.1 // indirect
github.com/gorilla/mux v1.7.4
github.com/magiconair/properties v1.8.1
github.com/morikuni/aec v0.0.0-20170113033406-39771216ff4c // indirect
github.com/opencontainers/go-digest v1.0.0-rc1 // indirect
github.com/opencontainers/image-spec v1.0.1 // indirect
github.com/pelletier/go-toml v1.6.0 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/rogpeppe/go-internal v1.5.2 // indirect
github.com/sergi/go-diff v1.0.0 // indirect
github.com/sirupsen/logrus v1.5.0
github.com/spf13/afero v1.2.2 // 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.6.3
github.com/stretchr/objx v0.2.0 // indirect
github.com/stretchr/testify v1.5.1
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b // indirect
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae // indirect
golang.org/x/text v0.3.2 // indirect
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c // indirect
google.golang.org/grpc v1.27.1 // indirect
gopkg.in/ini.v1 v1.52.0 // indirect
gopkg.in/yaml.v2 v2.2.8 // indirect
gotest.tools v2.2.0+incompatible // indirect
)
go 1.14

357
go.sum Normal file
View File

@@ -0,0 +1,357 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
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/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/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/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
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/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
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/containerd/containerd v1.3.3 h1:LoIzb5y9x5l8VKAlyrbusNPXqBY0+kviRloxFUMFwKc=
github.com/containerd/containerd v1.3.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=
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
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/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/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/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
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/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-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=
github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY=
github.com/gobuffalo/envy v1.7.0 h1:GlXgaiBkmrYMHco6t4j7SacKO4XUjvh5pwXh0f4uxXU=
github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI=
github.com/gobuffalo/envy v1.9.0 h1:eZR0DuEgVLfeIb1zIKt3bT4YovIMf9O9LXQeCZLXpqE=
github.com/gobuffalo/envy v1.9.0/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w=
github.com/gobuffalo/logger v1.0.0/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs=
github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4=
github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q=
github.com/gobuffalo/packd v1.0.0 h1:6ERZvJHfe24rfFmA9OaoKBdC7+c9sydrytMg8SdFGBM=
github.com/gobuffalo/packd v1.0.0/go.mod h1:6VTc4htmJRFB7u1m/4LeMTWjFoYrUiBkU9Fdec9hrhI=
github.com/gobuffalo/packr v1.30.1 h1:hu1fuVR3fXEZR7rXNW3h8rqSML8EVAf6KNm0NKO/wKg=
github.com/gobuffalo/packr v1.30.1/go.mod h1:ljMyFO2EcrnzsHsN99cvbq055Y9OhRrIaviy289eRuk=
github.com/gobuffalo/packr/v2 v2.5.1/go.mod h1:8f9c96ITobJlPzI44jj+4tHnEKNt0xXWSVlXRN9X1Iw=
github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ=
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
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.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
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.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
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=
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=
github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4=
github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
github.com/karrick/godirwalk v1.10.12/go.mod h1:RoGL9dQei4vP9ilrpETWE8CLOZ1kiN0LhBygSwrAsHA=
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
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/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=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
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/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho=
github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
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/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-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
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/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.6.0 h1:aetoXYr0Tv7xRU/V4B4IZJ2QcbtMUFoNb3ORp7TzIK4=
github.com/pelletier/go-toml v1.6.0/go.mod h1:5N711Q9dKgbdkxHL+MEfF31hpT7l0S0s/t2kKREewys=
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=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
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/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=
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.0 h1:RR9dF3JtopPvtkroDZuVD7qquD0bnHlKSqaQhgwt8yk=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.3.2 h1:XU784Pr0wdahMY2bYcyK6N1KuaRAdLtqD4qd8D18Bfs=
github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/rogpeppe/go-internal v1.5.2 h1:qLvObTrvO/XRCqmkKxUlOBc48bI3efyDuAZe25QiF0w=
github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
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/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.5.0 h1:1N5EYkVAPEywqZRJd7cwnRtCb6xJx7NH3T3WUTF980Q=
github.com/sirupsen/logrus v1.5.0/go.mod h1:+F7Ogzej0PZc/94MaYx/nvG9jOFMD2osvC3s+Squfpo=
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.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
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=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.3 h1:zPAT6CGy6wXeQ7NtTnaTerfKOsV6V6F8agHXFiazDkg=
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.3.2 h1:VUFqw5KcqRf7i70GOzW7N+Q7+gxVBkSSqiXB12+JQ4M=
github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s=
github.com/spf13/viper v1.6.3 h1:pDDu1OyEDTKzpJwdq4TiuLyMsUgRa/BT5cn5O62NoHs=
github.com/spf13/viper v1.6.3/go.mod h1:jUMtyi0/lB5yZH/FjyGAoH7IMNrIhlBf6pXZmbMDvzw=
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/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.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
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.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=
go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q=
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092 h1:4QSRKanuywn15aTZvI/mIDEgPQpswuFndXpOj3rKEco=
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/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-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
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-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/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/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190624180213-70d37148ca0c/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
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-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c h1:xFOdgVPpeowWAH0MJ5i0XMp+3yWiWamMtN/kx9xThIQ=
google.golang.org/genproto v0.0.0-20200226201735-46b91f19d98c/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.21.0 h1:G+97AoqBnmZIT91cLG/EkCoK9NSelj64P8bOHHNmGn0=
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
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/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.52.0 h1:j+Lt/M1oPPejkniCg1TkWE2J3Eh1oZTsHSXzMTzUXn4=
gopkg.in/ini.v1 v1.52.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=
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.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

1
integration/.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
__diff_output__

8
integration/Dockerfile Normal file
View File

@@ -0,0 +1,8 @@
FROM amir20/docker-alpine-puppeteer:edge
COPY --chown=pptruser:pptruser package*.json /app/
RUN yarn
COPY --chown=pptruser:pptruser . /app/
CMD [ "yarn", "test"]

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@@ -0,0 +1,18 @@
version: "3.4"
services:
dozzle:
container_name: dozzle
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- DOZZLE_FILTER=name=dozzle
build:
context: ..
integration:
build:
context: .
command: npm test
environment:
- BASE=http://dozzle:8080/
depends_on:
- dozzle

View File

@@ -0,0 +1,9 @@
module.exports = {
launch: {
headless: process.env.HEADLESS !== "false",
defaultViewport: { width: 1920, height: 1200 },
args: ["--no-sandbox", "--disable-setuid-sandbox"],
executablePath: process.env.CHROME_EXE_PATH || "",
},
browserContext: "incognito",
};

View File

@@ -0,0 +1,5 @@
const { toMatchImageSnapshot } = require("jest-image-snapshot");
expect.extend({ toMatchImageSnapshot });
jest.setTimeout(5000);

24
integration/package.json Normal file
View File

@@ -0,0 +1,24 @@
{
"name": "test",
"version": "1.0.0",
"description": "",
"scripts": {
"test": "jest"
},
"author": "",
"license": "ISC",
"dependencies": {
"jest": "^25.2.6",
"jest-image-snapshot": "^3.0.1",
"puppeteer": "^2.1.1"
},
"jest": {
"preset": "jest-puppeteer",
"setupFilesAfterEnv": [
"<rootDir>/jest-setup.js"
]
},
"devDependencies": {
"jest-puppeteer": "^4.4.0"
}
}

65
integration/test.js Normal file
View File

@@ -0,0 +1,65 @@
const puppeteer = require("puppeteer");
const iPhoneX = puppeteer.devices["iPhone X"];
const iPadLandscape = puppeteer.devices["iPad landscape"];
const { BASE } = process.env;
describe("home page", () => {
beforeEach(async () => {
await page.goto(BASE, { waitUntil: "networkidle2" });
});
it("renders full page on desktop", async () => {
const image = await page.screenshot({ fullPage: true });
expect(image).toMatchImageSnapshot();
});
it("renders ipad viewport", async () => {
await page.emulate(iPadLandscape);
const image = await page.screenshot();
expect(image).toMatchImageSnapshot();
});
it("renders iphone viewport", async () => {
await page.emulate(iPhoneX);
const image = await page.screenshot();
expect(image).toMatchImageSnapshot();
});
describe("has menu visible", () => {
beforeAll(async () => {
await jestPuppeteer.resetBrowser();
// await page.setViewport({ width: 1920, height: 1200 });
});
beforeEach(async () => {
await page.goto(BASE, { waitUntil: "networkidle2" });
});
it("and shows one container with correct title", async () => {
const menuTitle = await page.$eval("aside ul.menu-list li a", (e) => e.title);
expect(menuTitle).toEqual("dozzle");
});
it("and menu is clickable", async () => {
await page.click("aside ul.menu-list li a");
const className = await page.$eval("aside ul.menu-list li a", (e) => e.className);
expect(className).toContain("router-link-exact-active");
});
it("and when clicked shows logs", async () => {
await page.click("aside ul.menu-list li a");
await page.waitForSelector("ul.events li span.text");
const text = await page.$eval("ul.events li:nth-child(2) span.text", (e) => e.textContent);
expect(text).toContain("Dozzle version dev");
});
});
});

4013
integration/yarn.lock Normal file

File diff suppressed because it is too large Load Diff

255
main.go
View File

@@ -1,37 +1,70 @@
package main
import (
"encoding/json"
"fmt"
"context"
"net/http"
"net/url"
"os"
"os/signal"
"strings"
"time"
"github.com/amir20/dozzle/docker"
"github.com/gobuffalo/packr"
"github.com/gorilla/mux"
log "github.com/sirupsen/logrus"
flag "github.com/spf13/pflag"
"html/template"
"net/http"
"strings"
"github.com/spf13/pflag"
"github.com/spf13/viper"
)
var (
addr = ""
base = ""
level = ""
version = "dev"
commit = "none"
date = "unknown"
addr = ""
base = ""
level = ""
showAll = false
tailSize = 300
filters map[string]string
version = "dev"
)
type handler struct {
client docker.Client
box packr.Box
client docker.Client
showAll bool
box packr.Box
}
func init() {
flag.StringVar(&addr, "addr", ":8080", "http service address")
flag.StringVar(&base, "base", "/", "base address of the application to mount")
flag.StringVar(&level, "level", "info", "logging level")
flag.Parse()
pflag.String("addr", ":8080", "http service address")
pflag.String("base", "/", "base address of the application to mount")
pflag.Bool("showAll", false, "show all containers, even stopped")
pflag.String("level", "info", "logging level")
pflag.Int("tailSize", 300, "Tail size to use for initial container logs")
pflag.StringToStringVar(&filters, "filter", map[string]string{}, "Container filters to use for showing logs")
pflag.Parse()
viper.AutomaticEnv()
viper.SetEnvPrefix("DOZZLE")
viper.BindPFlags(pflag.CommandLine)
addr = viper.GetString("addr")
base = viper.GetString("base")
level = viper.GetString("level")
tailSize = viper.GetInt("tailSize")
showAll = viper.GetBool("showAll")
// Until https://github.com/spf13/viper/issues/608 is fixed. We have to use this hacky way.
// filters = viper.GetStringSlice("filter")
if value, ok := os.LookupEnv("DOZZLE_FILTER"); ok {
log.Infof("Parsing %s", value)
urlValues, err := url.ParseQuery(strings.ReplaceAll(value, ",", "&"))
if err != nil {
log.Fatal(err)
}
filters = map[string]string{}
for k, v := range urlValues {
filters[k] = v[0]
}
}
l, _ := log.ParseLevel(level)
log.SetLevel(l)
@@ -42,160 +75,54 @@ func init() {
})
}
func createRoutes(base string, h *handler) *mux.Router {
r := mux.NewRouter()
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/containers.json", h.listContainers)
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 main() {
dockerClient := docker.NewClient()
_, err := dockerClient.ListContainers()
log.Infof("Dozzle version %s", version)
dockerClient := docker.NewClientWithFilters(filters)
_, err := dockerClient.ListContainers(true)
if err != nil {
log.Fatalf("Could not connect to Docker Engine: %v", err)
}
box := packr.NewBox("./static")
h := &handler{dockerClient, box}
r := createRoutes(base, &handler{
client: dockerClient,
showAll: showAll,
box: box,
})
srv := &http.Server{Addr: addr, Handler: r}
r := mux.NewRouter()
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/containers.json", h.listContainers)
s.HandleFunc("/api/logs/stream", h.streamLogs)
s.HandleFunc("/api/events/stream", h.streamEvents)
s.HandleFunc("/version", h.version)
s.PathPrefix("/").Handler(http.StripPrefix(base, http.HandlerFunc(h.index)))
log.Infof("Accepting connections on %s", addr)
log.Fatal(http.ListenAndServe(addr, 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, _ := h.box.FindString("index.html")
text = strings.Replace(text, "__BASE__", "{{ .Base }}", -1)
tmpl, err := template.New("index.html").Parse(text)
if err != nil {
panic(err)
go func() {
log.Infof("Accepting connections on %s", srv.Addr)
if err := srv.ListenAndServe(); err != nil {
log.Fatal(err)
}
}()
path := ""
if base != "/" {
path = base
}
data := struct{ Base string }{path}
err = tmpl.Execute(w, data)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}
}
func (h *handler) listContainers(w http.ResponseWriter, r *http.Request) {
containers, err := h.client.ListContainers()
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = json.NewEncoder(w).Encode(containers)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
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
}
messages, err := h.client.ContainerLogs(r.Context(), 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("Transfer-Encoding", "chunked")
log.Debugf("Starting to stream logs for %s", id)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
_, e := fmt.Fprintf(w, "data: %s\n\n", message)
if e != nil {
log.Debugf("Error while writing to log stream: %v", e)
break Loop
}
f.Flush()
case e := <-err:
log.Debugf("Error while reading from log stream: %v", e)
break Loop
}
}
}
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("Transfer-Encoding", "chunked")
ctx := r.Context()
messages, err := h.client.Events(ctx)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
switch message.Action {
case "connect", "disconnect", "create", "destroy", "start", "stop":
log.Debugf("Triggering docker event: %v", message.Action)
_, err := fmt.Fprintf(w, "event: containers-changed\ndata: %s\n\n", message.Action)
if err != nil {
log.Debugf("Error while writing to event stream: %v", err)
break
}
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)
fmt.Fprintln(w, commit)
fmt.Fprintln(w, date)
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
signal.Notify(c, os.Kill)
<-c
log.Infof("Shutting down...")
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
srv.Shutdown(ctx)
os.Exit(0)
}

View File

@@ -3,14 +3,17 @@ package main
import (
"context"
"errors"
"github.com/docker/docker/api/types/events"
"net/http"
"net/http/httptest"
"os"
"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"
)
@@ -20,7 +23,16 @@ type MockedClient struct {
docker.Client
}
func (m *MockedClient) ListContainers() ([]docker.Container, error) {
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)
}
func (m *MockedClient) ListContainers(showAll bool) ([]docker.Container, error) {
args := m.Called()
containers, ok := args.Get(0).([]docker.Container)
if !ok {
@@ -29,8 +41,8 @@ func (m *MockedClient) ListContainers() ([]docker.Container, error) {
return containers, args.Error(1)
}
func (m *MockedClient) ContainerLogs(ctx context.Context, id string) (<-chan string, <-chan error) {
args := m.Called(ctx, id)
func (m *MockedClient) ContainerLogs(ctx context.Context, id string, tailSize int) (<-chan string, <-chan error) {
args := m.Called(ctx, id, tailSize)
channel, ok := args.Get(0).(chan string)
if !ok {
panic("channel is not of type chan string")
@@ -89,17 +101,16 @@ func Test_handler_streamLogs_happy(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
q := req.URL.Query()
q.Add("id", "123456")
q.Add("id", id)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("ContainerLogs", mock.Anything, id).Return(messages, errChannel)
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)
@@ -107,6 +118,26 @@ func Test_handler_streamLogs_happy(t *testing.T) {
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
}
func Test_handler_streamLogs_error_finding_container(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
q := req.URL.Query()
q.Add("id", id)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
mockedClient := new(MockedClient)
mockedClient.On("FindContainer", id).Return(docker.Container{}, errors.New("error finding container"))
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
@@ -116,15 +147,15 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
id := "123456"
req, err := http.NewRequest("GET", "/api/logs/stream", nil)
q := req.URL.Query()
q.Add("id", "123456")
q.Add("id", id)
req.URL.RawQuery = q.Encode()
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
mockedClient := new(MockedClient)
messages := make(chan string)
errChannel := make(chan error)
mockedClient.On("ContainerLogs", mock.Anything, id).Return(messages, errChannel)
mockedClient.On("FindContainer", id).Return(docker.Container{ID: id}, nil)
mockedClient.On("ContainerLogs", mock.Anything, id, 300).Return(messages, errChannel)
go func() {
errChannel <- errors.New("test error")
@@ -132,6 +163,7 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamLogs)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
@@ -140,7 +172,6 @@ func Test_handler_streamLogs_error_reading(t *testing.T) {
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.")
rr := httptest.NewRecorder()
mockedClient := new(MockedClient)
messages := make(chan events.Message)
errChannel := make(chan error)
@@ -158,6 +189,7 @@ func Test_handler_streamEvents_happy(t *testing.T) {
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
@@ -166,7 +198,6 @@ func Test_handler_streamEvents_happy(t *testing.T) {
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.")
rr := httptest.NewRecorder()
mockedClient := new(MockedClient)
messages := make(chan events.Message)
errChannel := make(chan error)
@@ -179,6 +210,7 @@ func Test_handler_streamEvents_error(t *testing.T) {
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
@@ -188,8 +220,6 @@ func Test_handler_streamEvents_error_request(t *testing.T) {
req, err := http.NewRequest("GET", "/api/events/stream", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
mockedClient := new(MockedClient)
messages := make(chan events.Message)
@@ -205,11 +235,80 @@ func Test_handler_streamEvents_error_request(t *testing.T) {
h := handler{client: mockedClient}
handler := http.HandlerFunc(h.streamEvents)
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
mockedClient.AssertExpectations(t)
}
func Test_createRoutes_index(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "index page"), "AddString should have no error.")
handler := createRoutes("/", &handler{mockedClient, true, box})
req, err := http.NewRequest("GET", "/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
}
func Test_createRoutes_redirect(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
req, err := http.NewRequest("GET", "/foobar", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
}
func Test_createRoutes_foobar(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("index.html", "foo page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
req, err := http.NewRequest("GET", "/foobar/", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
}
func Test_createRoutes_foobar_file(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
require.NoError(t, box.AddString("/test", "test page"), "AddString should have no error.")
handler := createRoutes("/foobar", &handler{mockedClient, true, box})
req, err := http.NewRequest("GET", "/foobar/test", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
assert.Equal(t, rr.Body.String(), "test page", "page doesn't match")
}
func Test_createRoutes_version(t *testing.T) {
mockedClient := new(MockedClient)
box := packr.NewBox("./virtual")
handler := createRoutes("/", &handler{mockedClient, true, box})
req, err := http.NewRequest("GET", "/version", nil)
require.NoError(t, err, "NewRequest should not return an error.")
rr := httptest.NewRecorder()
handler.ServeHTTP(rr, req)
abide.AssertHTTPResponse(t, t.Name(), rr.Result())
}
func TestMain(m *testing.M) {
exit := m.Run()
abide.Cleanup()

9296
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,17 +1,18 @@
{
"name": "dozzle",
"version": "1.4.4",
"description": "",
"main": "index.js",
"version": "1.22.5",
"description": "Realtime log viewer for docker containers. ",
"scripts": {
"prestart": "npm run clean",
"start": "DOCKER_API_VERSION=1.38 concurrently 'npm run watch-server' 'npm run watch-assets'",
"watch-assets": "parcel watch --public-url '__BASE__' assets/index.html -d static",
"watch-server": "reflex -g '**/*.go' -R '^node_modules/' -R '^static/' -R '^.cache/' -G '*_test.go' -s -- go run main.go --level debug",
"start": "concurrently 'npm run watch-server' 'npm run watch-assets'",
"watch-assets": "npx parcel watch --no-source-maps --public-url '__BASE__' assets/index.html -d static",
"watch-server": "reflex -c .reflex",
"prebuild": "npm run clean",
"build": "parcel build --no-source-maps --public-url '__BASE__' assets/index.html -d static",
"build": "npx parcel build --no-source-maps --public-url '__BASE__' assets/index.html -d static",
"clean": "rm -rf static/ a_main-packr.go",
"release": "goreleaser --rm-dist"
"release": "release-it",
"test": "jest",
"integration": "docker-compose -f integration/docker-compose.test.yml run --rm integration"
},
"repository": {
"type": "git",
@@ -24,24 +25,43 @@
},
"homepage": "https://github.com/amir20/dozzle#readme",
"dependencies": {
"bulma": "^0.7.2",
"date-fns": "^2.0.0-alpha.25",
"vue": "^2.5.17",
"vue-headful": "^2.0.1",
"vue-router": "^3.0.2"
"ansi-to-html": "^0.6.14",
"buefy": "^0.8.17",
"bulma": "^0.8.2",
"caniuse-lite": "^1.0.30001048",
"date-fns": "^2.12.0",
"hotkeys-js": "^3.7.6",
"lodash.debounce": "^4.0.8",
"semver": "^7.3.2",
"splitpanes": "^2.2.1",
"store": "^2.0.12",
"vue": "^2.6.11",
"vue-meta": "^2.3.3",
"vue-router": "^3.1.6",
"vuex": "^3.3.0"
},
"devDependencies": {
"@babel/core": "^7.1.6",
"@babel/plugin-transform-runtime": "^7.1.0",
"@vue/component-compiler-utils": "^2.3.0",
"concurrently": "^4.1.0",
"husky": "^1.2.0",
"lint-staged": "^8.1.0",
"parcel-bundler": "^1.10.3",
"prettier": "^1.15.2",
"sass": "^1.15.1",
"vue-hot-reload-api": "^2.3.1",
"vue-template-compiler": "^2.5.17"
"@babel/core": "^7.9.0",
"@babel/plugin-transform-runtime": "^7.9.0",
"@vue/component-compiler-utils": "^3.1.2",
"@vue/test-utils": "^1.0.0-beta.33",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^25.4.0",
"concurrently": "^5.2.0",
"eventsourcemock": "^2.0.0",
"husky": "^4.2.5",
"jest": "^25.4.0",
"jest-serializer-vue": "^2.0.2",
"lint-staged": "^10.1.7",
"mockdate": "^2.0.5",
"node-fetch": "^2.6.0",
"parcel-bundler": "^1.12.4",
"prettier": "^2.0.5",
"release-it": "^13.5.6",
"sass": "^1.26.5",
"vue-hot-reload-api": "^2.3.4",
"vue-jest": "^3.0.5",
"vue-template-compiler": "^2.6.11"
},
"husky": {
"hooks": {
@@ -50,12 +70,49 @@
},
"lint-staged": {
"*.{js,vue,css}": [
"prettier --write",
"git add"
"prettier --write"
]
},
"browserslist": [
">5%",
"not ie <= 8"
]
">5%"
],
"alias": {
"vue": "./node_modules/vue/dist/vue.runtime.esm.js"
},
"jest": {
"clearMocks": true,
"moduleFileExtensions": [
"js",
"json",
"vue"
],
"coveragePathIgnorePatterns": [
"node_modules"
],
"testPathIgnorePatterns": [
"node_modules",
"<rootDir>/integration/"
],
"transformIgnorePatterns": [
"node_modules"
],
"watchPathIgnorePatterns": [
"<rootDir>/node_modules/"
],
"snapshotSerializers": [
"jest-serializer-vue"
],
"transform": {
".*\\.vue$": "vue-jest",
".+\\.js$": "babel-jest"
}
},
"release-it": {
"github": {
"release": true
},
"npm": {
"publish": false
}
}
}

167
routes.go Normal file
View File

@@ -0,0 +1,167 @@
package main
import (
"encoding/json"
"fmt"
"html/template"
"net/http"
"runtime"
"strings"
"time"
log "github.com/sirupsen/logrus"
)
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)
}
text = strings.Replace(text, "__BASE__", "{{ .Base }}", -1)
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) listContainers(w http.ResponseWriter, r *http.Request) {
containers, err := h.client.ListContainers(h.showAll)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
err = json.NewEncoder(w).Encode(containers)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
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.StatusInternalServerError)
return
}
messages, err := h.client.ContainerLogs(r.Context(), container.ID, tailSize)
w.Header().Set("Content-Type", "text/event-stream")
w.Header().Set("Cache-Control", "no-cache")
w.Header().Set("Connection", "keep-alive")
w.Header().Set("Transfer-Encoding", "chunked")
log.Debugf("Starting to stream logs for %s", id)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
_, e := fmt.Fprintf(w, "data: %s\n\n", message)
if e != nil {
log.Debugf("Error while writing to log stream: %v", e)
break Loop
}
f.Flush()
case e := <-err:
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("Transfer-Encoding", "chunked")
ctx := r.Context()
messages, err := h.client.Events(ctx)
Loop:
for {
select {
case message, ok := <-messages:
if !ok {
break Loop
}
switch message.Action {
case "connect", "disconnect", "create", "destroy", "start", "stop":
log.Debugf("Triggering docker event: %v", message.Action)
_, err := fmt.Fprintf(w, "event: containers-changed\ndata: %s\n\n", message.Action)
if err != nil {
log.Debugf("Error while writing to event stream: %v", err)
break
}
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)
}

8870
yarn.lock Normal file

File diff suppressed because it is too large Load Diff