Compare commits
	
		
			12 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					86bb4e12b3 | ||
| 
						 | 
					32dd847f4f | ||
| 
						 | 
					35a5093f8e | ||
| 
						 | 
					6b5f5aeae3 | ||
| 
						 | 
					b41f315a25 | ||
| 
						 | 
					376ee2d730 | ||
| 
						 | 
					79a42bf9fb | ||
| 
						 | 
					2eff0dbeee | ||
| 
						 | 
					da9cddb691 | ||
| 
						 | 
					184e742b1b | ||
| 
						 | 
					42287f8848 | ||
| 
						 | 
					6495531d45 | 
@@ -2,7 +2,7 @@ before:
 | 
			
		||||
  hooks:
 | 
			
		||||
    - npm run clean
 | 
			
		||||
    - npm run build
 | 
			
		||||
    - packr
 | 
			
		||||
    - packr -z
 | 
			
		||||
builds:
 | 
			
		||||
  - env:
 | 
			
		||||
      - CGO_ENABLED=0
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -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))
 | 
			
		||||
@@ -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>
 | 
			
		||||
 
 | 
			
		||||
@@ -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,
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										107
									
								
								docker/client.go
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								docker/client.go
									
									
									
									
									
								
							@@ -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
									
									
									
								
							
							
						
						
									
										1459
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								package.json
									
									
									
									
									
								
							@@ -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"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user