Compare commits

...

12 Commits

Author SHA1 Message Date
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
7 changed files with 68 additions and 1552 deletions

View File

@@ -2,7 +2,7 @@ before:
hooks:
- npm run clean
- npm run build
- packr
- packr -z
builds:
- env:
- CGO_ENABLED=0

View File

@@ -1,14 +0,0 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [1.20.3](https://github.com/amir20/dozzle/compare/v1.20.2...v1.20.3) (2019-12-29)
### [1.20.2](https://github.com/amir20/dozzle/compare/v1.20.1...v1.20.2) (2019-12-29)
### [1.20.1](https://github.com/amir20/dozzle/compare/v1.20.0...v1.20.1) (2019-12-29)
### Bug Fixes
* tries to fix a scroll bug in mobile ([cc99eaa](https://github.com/amir20/dozzle/commit/cc99eaa819f1ca6fbb95d4e9da10ecc781d2fe01))

View File

@@ -5,7 +5,6 @@
<h2 class="title is-4">About</h2>
</div>
<h2 class="title is-6 is-marginless">Version</h2>
<div>
You are using Dozzle <i>{{ currentVersion }}</i
>.
@@ -57,20 +56,6 @@ import gt from "semver/functions/gt";
import valid from "semver/functions/valid";
import { mapActions, mapState } from "vuex";
function computedSettings(names) {
return names.reduce((map, name) => {
map[name] = {
get() {
return this.settings[name];
},
set(value) {
this.updateSetting({ [name]: value });
}
};
return map;
}, {});
}
export default {
props: [],
name: "Settings",
@@ -100,7 +85,17 @@ export default {
},
computed: {
...mapState(["settings"]),
...computedSettings.bind(this)(["search", "size"])
...["search", "size"].reduce((map, name) => {
map[name] = {
get() {
return this.settings[name];
},
set(value) {
this.updateSetting({ [name]: value });
}
};
return map;
}, {})
}
};
</script>

View File

@@ -64,7 +64,6 @@ es.addEventListener("containers-changed", e => setTimeout(() => store.dispatch("
mql.addListener(e => store.commit("SET_MOBILE_WIDTH", e.matches));
const store = new Vuex.Store({
strict: true,
state,
getters,
actions,

View File

@@ -123,6 +123,34 @@ func (d *dockerClient) ListContainers(showAll bool) ([]Container, error) {
return containers, nil
}
func logReader(reader io.ReadCloser, tty bool) func() (string, error) {
if tty {
scanner := bufio.NewScanner(reader)
return func() (string, error) {
if scanner.Scan() {
return scanner.Text(), nil
}
return "", io.EOF
}
}
hdr := make([]byte, 8)
var buffer bytes.Buffer
return func() (string, error) {
buffer.Reset()
_, err := reader.Read(hdr)
if err != nil {
return "", err
}
count := binary.BigEndian.Uint32(hdr[4:])
_, err = io.CopyN(&buffer, reader, int64(count))
if err != nil {
return "", err
}
return strings.TrimSpace(buffer.String()), nil
}
}
func (d *dockerClient) 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)
@@ -142,49 +170,23 @@ func (d *dockerClient) ContainerLogs(ctx context.Context, id string, tailSize in
containerJSON, _ := d.cli.ContainerInspect(ctx, id)
if containerJSON.Config.Tty {
go func() {
defer close(messages)
defer close(errChannel)
defer reader.Close()
scanner := bufio.NewScanner(reader)
for scanner.Scan() {
line := scanner.Text()
select {
case messages <- line:
case <-ctx.Done():
}
go func() {
defer close(messages)
defer close(errChannel)
defer reader.Close()
nextEntry := logReader(reader, containerJSON.Config.Tty)
for {
line, err := nextEntry()
if err != nil {
errChannel <- err
break
}
}()
} else {
go func() {
defer close(messages)
defer close(errChannel)
defer reader.Close()
hdr := make([]byte, 8)
var buffer bytes.Buffer
for {
_, err := reader.Read(hdr)
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 <- buffer.String():
case <-ctx.Done():
}
buffer.Reset()
select {
case messages <- line:
case <-ctx.Done():
}
}()
}
}
}()
return messages, errChannel
}
@@ -202,15 +204,15 @@ func (d *dockerClient) ContainerLogsBetweenDates(ctx context.Context, id string,
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
hdr := make([]byte, 8)
var buffer bytes.Buffer
for {
_, err := reader.Read(hdr)
line, err := nextEntry()
if err != nil {
if err == io.EOF {
break
@@ -218,18 +220,7 @@ func (d *dockerClient) ContainerLogsBetweenDates(ctx context.Context, id string,
return nil, err
}
}
count := binary.BigEndian.Uint32(hdr[4:])
_, err = io.CopyN(&buffer, reader, int64(count))
if err != nil {
if err == io.EOF {
break
} else {
return nil, err
}
}
messages = append(messages, strings.TrimSpace(buffer.String()))
buffer.Reset()
messages = append(messages, line)
}
return messages, nil

1459
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
{
"name": "dozzle",
"version": "1.20.1",
"version": "1.20.7",
"description": "Realtime log viewer for docker containers. ",
"scripts": {
"prestart": "npm run clean",
@@ -11,9 +11,7 @@
"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",
"test": "jest",
"commit": "git-cz",
"version": "standard-version"
"test": "jest"
},
"repository": {
"type": "git",
@@ -27,7 +25,7 @@
"homepage": "https://github.com/amir20/dozzle#readme",
"dependencies": {
"ansi-to-html": "^0.6.13",
"buefy": "^0.8.8",
"buefy": "^0.8.9",
"bulma": "^0.8.0",
"date-fns": "^2.8.1",
"hotkeys-js": "^3.7.3",
@@ -47,7 +45,6 @@
"@vue/test-utils": "^1.0.0-beta.29",
"babel-core": "^7.0.0-bridge.0",
"babel-jest": "^24.9.0",
"commitizen": "^4.0.3",
"concurrently": "^5.0.2",
"cz-conventional-changelog": "^3.0.2",
"eventsourcemock": "^2.0.0",
@@ -60,7 +57,6 @@
"parcel-bundler": "^1.12.4",
"prettier": "^1.19.1",
"sass": "^1.24.0",
"standard-version": "^7.0.1",
"vue-hot-reload-api": "^2.3.4",
"vue-jest": "^3.0.5",
"vue-template-compiler": "^2.6.11"