Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package fortio for openSUSE:Factory checked in at 2023-06-16 16:53:59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/fortio (Old) and /work/SRC/openSUSE:Factory/.fortio.new.15902 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "fortio" Fri Jun 16 16:53:59 2023 rev:39 rq:1093214 version:1.55.0 Changes: -------- --- /work/SRC/openSUSE:Factory/fortio/fortio.changes 2023-05-03 12:57:30.391913315 +0200 +++ /work/SRC/openSUSE:Factory/.fortio.new.15902/fortio.changes 2023-06-16 16:54:49.737701033 +0200 @@ -1,0 +2,18 @@ +Thu Jun 15 06:23:21 UTC 2023 - [email protected] + +- Update to version 1.55.0: + * using json structured logging, add `log-errors` option setting + to rapi and UI (#768) + * Bump golang.org/x/net from 0.10.0 to 0.11.0 (#769) + * Bump docker/build-push-action from 4.0.0 to 4.1.0 (#764) + * Bump docker/setup-buildx-action from 2.5.0 to 2.6.0 (#765) + * Bump docker/setup-qemu-action from 2.1.0 to 2.2.0 (#767) + * Bump actions/checkout from 3.5.2 to 3.5.3 (#766) + * Bump github/codeql-action from 2.3.6 to 2.13.4 (#763) + * go1.20.5 build image (#762) + * Bump github/codeql-action from 2.3.3 to 2.3.6 (#761) + * Bump golang.org/x/net from 0.9.0 to 0.10.0 (#759) + * Bump github/codeql-action from 2.3.2 to 2.3.3 (#757) + * Bump google.golang.org/grpc from 1.54.0 to 1.55.0 (#756) + +------------------------------------------------------------------- Old: ---- fortio-1.54.3.obscpio New: ---- fortio-1.55.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ fortio.spec ++++++ --- /var/tmp/diff_new_pack.neRDMn/_old 2023-06-16 16:54:51.009708598 +0200 +++ /var/tmp/diff_new_pack.neRDMn/_new 2023-06-16 16:54:51.013708622 +0200 @@ -19,7 +19,7 @@ %define __arch_install_post export NO_BRP_STRIP_DEBUG=true Name: fortio -Version: 1.54.3 +Version: 1.55.0 Release: 0 Summary: Load testing library, command line tool, advanced echo server and web UI License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.neRDMn/_old 2023-06-16 16:54:51.045708812 +0200 +++ /var/tmp/diff_new_pack.neRDMn/_new 2023-06-16 16:54:51.045708812 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/fortio/fortio</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.54.3</param> + <param name="revision">v1.55.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.neRDMn/_old 2023-06-16 16:54:51.065708931 +0200 +++ /var/tmp/diff_new_pack.neRDMn/_new 2023-06-16 16:54:51.069708955 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/fortio/fortio</param> - <param name="changesrevision">c6665d10f24572d219ed90c65e011a4f8ffdc8d3</param></service></servicedata> + <param name="changesrevision">7d76c8ef1ea2b66f736b3d54d093ed0d2ce2a768</param></service></servicedata> (No newline at EOF) ++++++ fortio-1.54.3.obscpio -> fortio-1.55.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/.circleci/config.yml new/fortio-1.55.0/.circleci/config.yml --- old/fortio-1.54.3/.circleci/config.yml 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/.circleci/config.yml 2023-06-15 01:22:53.000000000 +0200 @@ -8,7 +8,7 @@ &defaultEnv docker: # specify the version - - image: docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 + - image: docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 working_directory: /build/fortio jobs: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/.github/workflows/codeql-analysis.yml new/fortio-1.55.0/.github/workflows/codeql-analysis.yml --- old/fortio-1.54.3/.github/workflows/codeql-analysis.yml 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/.github/workflows/codeql-analysis.yml 2023-06-15 01:22:53.000000000 +0200 @@ -40,11 +40,11 @@ steps: - name: Checkout repository - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # pin@v3 + uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # pin@v2 + uses: github/codeql-action/init@cdcdbb579706841c47f7063dda365e292e5cad7a # pin@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -55,7 +55,7 @@ # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # pin@v2 + uses: github/codeql-action/autobuild@cdcdbb579706841c47f7063dda365e292e5cad7a # pin@v2 # â¹ï¸ Command-line programs to run using the OS shell. # ð https://git.io/JvXDl @@ -66,4 +66,4 @@ # make bootstrap # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f3feb00acb00f31a6f60280e6ace9ca31d91c76a # pin@v2 + uses: github/codeql-action/analyze@cdcdbb579706841c47f7063dda365e292e5cad7a # pin@v2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/.github/workflows/main.yml new/fortio-1.55.0/.github/workflows/main.yml --- old/fortio-1.54.3/.github/workflows/main.yml 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/.github/workflows/main.yml 2023-06-15 01:22:53.000000000 +0200 @@ -22,14 +22,14 @@ # Steps represent a sequence of tasks that will be executed as part of the job steps: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # pin@v3 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3 - name: Set up QEMU - uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # pin@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # pin@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # pin@v2 + uses: docker/setup-buildx-action@6a58db7e0d21ca03e6c44877909e80e45217eed2 # pin@v2 - name: Available platforms run: echo ${{ steps.buildx.outputs.platforms }} @@ -51,7 +51,7 @@ echo "Version $VERSION, Package version $PACKAGE_VERSION" - name: Build and push Docker image - uses: docker/build-push-action@3b5e8027fcad23fda98b2e3ac259d8d67585f671 # pin@v3 + uses: docker/build-push-action@44ea916f6c540f9302d50c2b1e5a8dc071f15cdf # pin@v3 with: context: . platforms: linux/amd64,linux/arm64,linux/ppc64le,linux/s390x diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/.github/workflows/manual-build.yml new/fortio-1.55.0/.github/workflows/manual-build.yml --- old/fortio-1.54.3/.github/workflows/manual-build.yml 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/.github/workflows/manual-build.yml 2023-06-15 01:22:53.000000000 +0200 @@ -21,16 +21,16 @@ run: | echo "tag is ${{ github.event.inputs.tag }}" - - uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # pin@v3 + - uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # pin@v3 with: ref: ${{ github.event.inputs.tag }} - name: Set up QEMU - uses: docker/setup-qemu-action@e81a89b1732b9c48d79cd809d8d81d79c4647a18 # pin@v2 + uses: docker/setup-qemu-action@2b82ce82d56a2a04d2637cd93a637ae1b359c0a7 # pin@v2 - name: Set up Docker Buildx id: buildx - uses: docker/setup-buildx-action@4b4e9c3e2d4531116a6f8ba8e71fc6e2cb6e6c8c # pin@v2 + uses: docker/setup-buildx-action@6a58db7e0d21ca03e6c44877909e80e45217eed2 # pin@v2 - name: Build id: build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/.golangci.yml new/fortio-1.55.0/.golangci.yml --- old/fortio-1.54.3/.golangci.yml 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/.golangci.yml 2023-06-15 01:22:53.000000000 +0200 @@ -1,4 +1,4 @@ -# Config for golanglint-ci +# Config for golangci-lint # output configuration options @@ -45,14 +45,6 @@ - (github.com/golangci/golangci-lint/pkg/logutils.Log).FErrf enable-all: true disable-all: false - depguard: - list-type: blacklist - include-go-root: false - packages: - - github.com/sirupsen/logrus - packages-with-error-message: - # specify an error message to output when a blacklisted package is used - - github.com/sirupsen/logrus: "logging is allowed only by fortio.log" lll: # max line length, lines longer will be reported. Default is 120. # '\t' is counted as 1 character by default, and can be changed with the tab-width option @@ -115,6 +107,7 @@ - cyclop - forcetypeassert - ireturn + - depguard enable-all: true disable-all: false # Must not use fast: true in newer golangci-lint or it'll just skip a bunch of linter instead of doing caching like before (!) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Dockerfile new/fortio-1.55.0/Dockerfile --- old/fortio-1.54.3/Dockerfile 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Dockerfile 2023-06-15 01:22:53.000000000 +0200 @@ -1,5 +1,5 @@ # Build the binaries in larger image -FROM docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 as build +FROM docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 as build WORKDIR /build COPY --chown=build:build . fortio ARG MODE=install diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Dockerfile.build new/fortio-1.55.0/Dockerfile.build --- old/fortio-1.54.3/Dockerfile.build 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Dockerfile.build 2023-06-15 01:22:53.000000000 +0200 @@ -1,5 +1,5 @@ # Dependencies and linters for build: -FROM golang:1.20.4@sha256:6dd5c5f8936d7d4487802fb10a77f31b1776740be0fc17ada1acb74ac958f7be +FROM golang:1.20.5@sha256:4b1fc02d16fca272e5e6e6adc98396219b43ef663a377eef4a97e881d364393f # Need gcc for -race test (and some linters though those work with CGO_ENABLED=0) RUN apt-get -y update && \ apt-get --no-install-recommends -y upgrade && \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Dockerfile.echosrv new/fortio-1.55.0/Dockerfile.echosrv --- old/fortio-1.54.3/Dockerfile.echosrv 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Dockerfile.echosrv 2023-06-15 01:22:53.000000000 +0200 @@ -1,5 +1,5 @@ # Build the binaries in larger image -FROM docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 as build +FROM docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 as build WORKDIR /build COPY . fortio RUN make -C fortio official-build-version BUILD_DIR=/build OFFICIAL_TARGET=fortio.org/fortio/echosrv diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Dockerfile.fcurl new/fortio-1.55.0/Dockerfile.fcurl --- old/fortio-1.54.3/Dockerfile.fcurl 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Dockerfile.fcurl 2023-06-15 01:22:53.000000000 +0200 @@ -1,5 +1,5 @@ # Build the binaries in larger image -FROM docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 as build +FROM docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 as build WORKDIR /build COPY . fortio RUN make -C fortio official-build-version BUILD_DIR=/build OFFICIAL_TARGET=fortio.org/fortio/fcurl diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Makefile new/fortio-1.55.0/Makefile --- old/fortio-1.54.3/Makefile 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Makefile 2023-06-15 01:22:53.000000000 +0200 @@ -7,7 +7,7 @@ IMAGES=echosrv fcurl # plus the combo image / Dockerfile without ext. DOCKER_PREFIX := docker.io/fortio/fortio -BUILD_IMAGE_TAG := v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 +BUILD_IMAGE_TAG := v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 BUILDX_PLATFORMS := linux/amd64,linux/arm64,linux/ppc64le,linux/s390x BUILDX_POSTFIX := ifeq '$(shell echo $(BUILDX_PLATFORMS) | awk -F "," "{print NF-1}")' '0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/README.md new/fortio-1.55.0/README.md --- old/fortio-1.54.3/README.md 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/README.md 2023-06-15 01:22:53.000000000 +0200 @@ -1,4 +1,4 @@ -<!-- 1.54.3 --> +<!-- 1.55.0 --> # Fortio [](https://github.com/avelino/awesome-go#networking) @@ -33,7 +33,7 @@ We also have moved some of the library to their own toplevel package, like: - Dynamic flags: [fortio.org/dflag](https://github.com/fortio/dflag#fortio-dynamic-flags) -- Logger: [fortio.org/log](https://github.com/fortio/log#log) +- Logger: [fortio.org/log](https://github.com/fortio/log#log) - now using structured JSON logs for servers (vs text for CLIs) since fortio 1.55 / log 1.4. - Version helper: [fortio.org/version](https://github.com/fortio/version#version) - CLI helpers integrating the above to reduce toil making new tools [fortio.org/cli](https://github.com/fortio/cli#cli) and servers [fortio.org/scli](https://github.com/fortio/scli#scli) for arguments, flags, usage, dynamic config, etc... @@ -60,13 +60,13 @@ The [releases](https://github.com/fortio/fortio/releases) page has binaries for many OS/architecture combinations (see assets): ```shell -curl -L https://github.com/fortio/fortio/releases/download/v1.54.3/fortio-linux_amd64-1.54.3.tgz \ +curl -L https://github.com/fortio/fortio/releases/download/v1.55.0/fortio-linux_amd64-1.55.0.tgz \ | sudo tar -C / -xvzpf - # or the debian package -wget https://github.com/fortio/fortio/releases/download/v1.54.3/fortio_1.54.3_amd64.deb -dpkg -i fortio_1.54.3_amd64.deb +wget https://github.com/fortio/fortio/releases/download/v1.55.0/fortio_1.55.0_amd64.deb +dpkg -i fortio_1.55.0_amd64.deb # or the rpm -rpm -i https://github.com/fortio/fortio/releases/download/v1.54.3/fortio-1.54.3-1.x86_64.rpm +rpm -i https://github.com/fortio/fortio/releases/download/v1.55.0/fortio-1.55.0-1.x86_64.rpm # and more, see assets in release page ``` @@ -76,7 +76,7 @@ brew install fortio ``` -On Windows, download https://github.com/fortio/fortio/releases/download/v1.54.3/fortio_win_1.54.3.zip and extract `fortio.exe` to any location, then using the Windows Command Prompt: +On Windows, download https://github.com/fortio/fortio/releases/download/v1.55.0/fortio_win_1.55.0.zip and extract `fortio.exe` to any location, then using the Windows Command Prompt: ``` fortio.exe server ``` @@ -127,7 +127,7 @@ <!-- use release/updateFlags.sh to update this section --> <pre> <!-- USAGE_START --> -ΦοÏÏίο 1.54.3 usage: +ΦοÏÏίο 1.55.0 usage: fortio command [flags] target where command is one of: load (load testing), server (starts ui, rest api, http-echo, redirect, proxies, tcp-echo, udp-echo and grpc ping servers), @@ -238,6 +238,8 @@ -json path Json output to provided file path or '-' for stdout (empty = no json output, unless -a is used) + -json-log + Log in JSON format, use -json-log=false to disable (default true) -k Do not verify certs in https/tls/grpc connections -keepalive Keep connection alive (only for fast http 1.1) (default true) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/Webtest.sh new/fortio-1.55.0/Webtest.sh --- old/fortio-1.54.3/Webtest.sh 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/Webtest.sh 2023-06-15 01:22:53.000000000 +0200 @@ -140,7 +140,7 @@ PPROF_URL="$BASE_URL/debug/pprof/heap?debug=1" $CURL "$PPROF_URL" | grep -i TotalAlloc # should find this in memory profile # creating dummy container to hold a volume for test certs due to remote docker bind mount limitation. -DOCKERCURLID=$(docker run -d -v $TEST_CERT_VOL --net host --name $DOCKERSECVOLNAME docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 sleep 120) +DOCKERCURLID=$(docker run -d -v $TEST_CERT_VOL --net host --name $DOCKERSECVOLNAME docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 sleep 120) # while we have something with actual curl binary do # Test for h2c upgrade (#562) docker exec $DOCKERSECVOLNAME /usr/bin/curl -v --http2 -m 10 -d foo42 http://localhost:8080/debug | tee >(cat 1>&2) | grep foo42 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/fhttp/http_client.go new/fortio-1.55.0/fhttp/http_client.go --- old/fortio-1.54.3/fhttp/http_client.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/fhttp/http_client.go 2023-06-15 01:22:53.000000000 +0200 @@ -203,6 +203,7 @@ Payload []byte // body for http request, implies POST if not empty. LogErrors bool // whether to log non 2xx code as they occur or not ID int `json:"-"` // thread/connect id to use for logging (thread id when used as a runner) + UniqueID int64 `json:"-"` // Run identifier when used through a runner, copied from RunnerOptions.RunID SequentialWarmup bool // whether to do http(s) runs warmup sequentially or in parallel (new default is //) ConnReuseRange [2]int // range of max number of connection to reuse for each thread. // When false, re-resolve the DNS name when the connection breaks. @@ -409,6 +410,7 @@ bodyContainsUUID bool // if body contains the "{uuid}" pattern (lowercase) logErrors bool id int + runID int64 ipAddrUsage *stats.Occurrence connectStats *stats.Histogram clientTrace CreateClientTrace @@ -521,7 +523,7 @@ code := resp.StatusCode log.Debugf("[%d] Got %d : %s for %s %s - response is %d bytes", c.id, code, resp.Status, req.Method, c.url, len(data)) if c.logErrors && !codeIsOK(code) { - log.Warnf("[%d] Non ok http code %d", c.id, code) + log.S(log.Warning, "Non ok http code", log.Attr("code", code), log.Attr("thread", c.id), log.Attr("run", c.runID)) } return code, n, 0 } @@ -573,6 +575,7 @@ connectStats: stats.NewHistogram(o.Offset.Seconds(), o.Resolution), clientTrace: o.ClientTrace, dataWriter: o.DataWriter, + runID: o.UniqueID, } dialCtx := func(ctx context.Context, network, addr string) (net.Conn, error) { // redirect all connections to resolved ip, and use cn as sni host @@ -702,6 +705,7 @@ uuidMarkers [][]byte logErrors bool id int + runID int64 https bool tlsConfig *tls.Config // Resolve the DNS name for each connection @@ -784,7 +788,7 @@ // note: Host includes the port bc := FastClient{ url: o.URL, host: url.Host, hostname: url.Hostname(), port: url.Port(), - http10: o.HTTP10, halfClose: o.AllowHalfClose, logErrors: o.LogErrors, id: o.ID, + http10: o.HTTP10, halfClose: o.AllowHalfClose, logErrors: o.LogErrors, id: o.ID, runID: o.UniqueID, https: o.https, connReuseRange: o.ConnReuseRange, connReuse: connReuse, resolve: o.Resolve, noResolveEachConn: o.NoResolveEachConn, ipAddrUsage: stats.NewOccurrence(), // Keep track of timing for connection (re)establishment. @@ -1055,7 +1059,8 @@ // TODO handle 100 Continue, make the "ok" codes configurable if !codeIsOK(c.code) { if c.logErrors { - log.Warnf("[%d] Non ok http code %d (%v)", c.id, c.code, string(c.buffer[:retcodeOffset+3])) + log.S(log.Warning, "Non ok http code", log.Attr("code", c.code), log.Str("status", string(c.buffer[:retcodeOffset+3])), + log.Attr("thread", c.id), log.Attr("run", c.runID)) } break } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/fhttp/httprunner.go new/fortio-1.55.0/fhttp/httprunner.go --- old/fortio-1.54.3/fhttp/httprunner.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/fhttp/httprunner.go 2023-06-15 01:22:53.000000000 +0200 @@ -94,10 +94,11 @@ connReuseMsg := "" if o.ConnReuseRange != [2]int{0, 0} { - connReuseMsg = fmt.Sprintf(", with connection reuse [%d, %d]", o.ConnReuseRange[0], o.ConnReuseRange[1]) + connReuseMsg = fmt.Sprintf("[%d, %d]", o.ConnReuseRange[0], o.ConnReuseRange[1]) } - log.Infof("Starting http test for %s with %d threads at %.1f qps and %s warmup%s", - o.URL, o.NumThreads, o.QPS, warmupMode, connReuseMsg) + log.S(log.Info, "Starting http test", log.Attr("run", o.RunID), log.Str("url", o.URL), + log.Attr("threads", o.NumThreads), log.Str("qps", fmt.Sprintf("%.1f", o.QPS)), log.Str("warmup", warmupMode), + log.Str("conn-reuse", connReuseMsg)) r := periodic.NewPeriodicRunner(&o.RunnerOptions) if o.HTTPOptions.Resolution <= 0 { // Set both connect histogram params when Resolution isn't set explicitly on the HTTP options @@ -107,6 +108,7 @@ } defer r.Options().Abort() numThreads := r.Options().NumThreads // can change during run for c > 2 n + o.HTTPOptions.UniqueID = o.RunnerOptions.RunID o.HTTPOptions.Init(o.URL) out := r.Options().Out // Important as the default value is set from nil to stdout inside NewPeriodicRunner total := HTTPRunnerResults{ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/fhttp/httprunner_test.go new/fortio-1.55.0/fhttp/httprunner_test.go --- old/fortio-1.54.3/fhttp/httprunner_test.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/fhttp/httprunner_test.go 2023-06-15 01:22:53.000000000 +0200 @@ -283,6 +283,7 @@ traceFactory := func(ctx context.Context) *httptrace.ClientTrace { return trace } opts.DisableFastClient = true opts.ClientTrace = traceFactory + opts.LogErrors = true for _, format := range []string{"json", "influx"} { dir := t.TempDir() fname := path.Join(dir, "access.log") @@ -657,6 +658,7 @@ log.SetLogLevel(log.Verbose) opts.AllowInitialErrors = true opts.NumThreads = 1 + opts.LogErrors = true _, err = RunHTTPTest(&opts) if err != nil { t.Errorf("Expecting no error because of allowing initial errors, got: %v", err) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/go.mod new/fortio-1.55.0/go.mod --- old/fortio-1.54.3/go.mod 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/go.mod 2023-06-15 01:22:53.000000000 +0200 @@ -6,13 +6,13 @@ fortio.org/assert v1.2.0 fortio.org/cli v1.1.0 fortio.org/dflag v1.5.2 - fortio.org/log v1.3.0 - fortio.org/scli v1.4.0 + fortio.org/log v1.4.0 + fortio.org/scli v1.5.0 fortio.org/version v1.0.2 github.com/golang/protobuf v1.5.3 github.com/google/uuid v1.3.0 - golang.org/x/net v0.9.0 - google.golang.org/grpc v1.54.0 + golang.org/x/net v0.11.0 + google.golang.org/grpc v1.55.0 ) // Local dev of dependencies changes @@ -29,8 +29,8 @@ fortio.org/sets v1.0.3 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 // indirect - golang.org/x/sys v0.7.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/sys v0.9.0 // indirect + golang.org/x/text v0.10.0 // indirect google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect google.golang.org/protobuf v1.30.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/go.sum new/fortio-1.55.0/go.sum --- old/fortio-1.54.3/go.sum 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/go.sum 2023-06-15 01:22:53.000000000 +0200 @@ -4,10 +4,10 @@ fortio.org/cli v1.1.0/go.mod h1:O3nVImKwJSvHKbMYWkqMbEagAXCS1xvSv1YbHwkKJjY= fortio.org/dflag v1.5.2 h1:F9XVRj4Qr2IbJP7BMj7XZc9wB0Q/RZ61Ool+4YPVad8= fortio.org/dflag v1.5.2/go.mod h1:ppb/A8u+KKg+qUUYZNYuvRnXuVb8IsdHb/XGzsmjkN8= -fortio.org/log v1.3.0 h1:bESPvuQGKejw7rrx41Sg3GoF+tsrB7oC08PxBs5/AM0= -fortio.org/log v1.3.0/go.mod h1:u/8/2lyczXq52aT5Nw6reD+3cR6m/EbS2jBiIYhgiTU= -fortio.org/scli v1.4.0 h1:hWULZt2eCuN9NMGX9pFMubMY/lNAxFWnNfwxPn2pztE= -fortio.org/scli v1.4.0/go.mod h1:wj7RDObUezKJkPCLHuNb6ktrnRhUYOLCkMhnFhhsfxA= +fortio.org/log v1.4.0 h1:xTCWj0nCj1QFw+QoBmOmxLsXXb7nqtwyoNGYcLFWEA4= +fortio.org/log v1.4.0/go.mod h1:u/8/2lyczXq52aT5Nw6reD+3cR6m/EbS2jBiIYhgiTU= +fortio.org/scli v1.5.0 h1:FG7thN0PM9KQInU+LFZ+mjUvShA02hdJNTRVp0r+QUQ= +fortio.org/scli v1.5.0/go.mod h1:42O1YYpSz+C9wKyfMkhtugtkldWX3zVGsrmCICRhkwg= fortio.org/sets v1.0.3 h1:HzewdGjH69YmyW06yzplL35lGr+X4OcqQt0qS6jbaO4= fortio.org/sets v1.0.3/go.mod h1:QZVj0r6KP/ZD9ebySW9SgxVNy/NjghUfyHW9NN+WU+4= fortio.org/version v1.0.2 h1:8NwxdX58aoeKx7T5xAPO0xlUu1Hpk42nRz5s6e6eKZ0= @@ -23,18 +23,18 @@ github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 h1:5llv2sWeaMSnA3w2kS57ouQQ4pudlXrR0dCgw51QK9o= golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= +golang.org/x/net v0.11.0 h1:Gi2tvZIJyBtO9SDr1q9h5hEQCp/4L2RQ+ar0qjx2oNU= +golang.org/x/net v0.11.0/go.mod h1:2L/ixqYpgIVXmeoSA/4Lu7BzTG4KIyPIryS4IsOd1oQ= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/sys v0.9.0 h1:KS/R3tvhPqvJvwcKfnBHJwwthS11LRhmM5D59eEXa0s= +golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58= +golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/grpc v1.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc v1.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= +google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/periodic/periodic.go new/fortio-1.55.0/periodic/periodic.go --- old/fortio-1.54.3/periodic/periodic.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/periodic/periodic.go 2023-06-15 01:22:53.000000000 +0200 @@ -404,7 +404,7 @@ // Always print that as we need ^C to interrupt, in that case the user need to notice _, _ = fmt.Fprintf(r.Out, "Starting at %g qps with %d thread(s) [gomax %d] until interrupted%s\n", r.QPS, r.NumThreads, runtime.GOMAXPROCS(0), extra) - return + return //nolint:nakedret // it's fine/cleaner to not repeat all the parameters we just set/we return. } // else: requestedDuration = fmt.Sprint(r.Duration) @@ -561,6 +561,8 @@ actualQPS := float64(functionDuration.Count) / elapsed.Seconds() if log.Log(log.Warning) { _, _ = fmt.Fprintf(r.Out, "Ended after %v : %d calls. qps=%.5g\n", elapsed, functionDuration.Count, actualQPS) + log.S(log.Info, "Run ended", log.Attr("run", r.RunID), log.Attr("elapsed", elapsed), + log.Attr("calls", functionDuration.Count), log.Attr("qps", actualQPS)) } if useQPS { //nolint:nestif percentNegative := 100. * float64(sleepTime.Hdata[0]) / float64(sleepTime.Count) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/rapi/data.go new/fortio-1.55.0/rapi/data.go --- old/fortio-1.54.3/rapi/data.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/rapi/data.go 2023-06-15 01:22:53.000000000 +0200 @@ -80,7 +80,7 @@ useCache := (info.ModTime() == gTSVCache.cachedDirTime) && (len(gTSVCache.cachedResult) > 0) if !useCache { var b bytes.Buffer - b.Write([]byte("TsvHttpData-1.0\n")) + b.WriteString("TsvHttpData-1.0\n") for _, e := range DataList() { fname := e + ".json" f, err := os.Open(path.Join(dataDir, fname)) @@ -96,13 +96,13 @@ log.Errf("Copy/read error for %s: %v", fname, err) continue } - b.Write([]byte(urlPrefix)) - b.Write([]byte(fname)) - b.Write([]byte("\t")) - b.Write([]byte(strconv.FormatInt(sz, 10))) - b.Write([]byte("\t")) - b.Write([]byte(base64.StdEncoding.EncodeToString(h.Sum(nil)))) - b.Write([]byte("\n")) + b.WriteString(urlPrefix) + b.WriteString(fname) + b.WriteString("\t") + b.WriteString(strconv.FormatInt(sz, 10)) + b.WriteString("\t") + b.WriteString(base64.StdEncoding.EncodeToString(h.Sum(nil))) + b.WriteString("\n") } gTSVCache.cachedDirTime = info.ModTime() gTSVCache.cachedResult = b.Bytes() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/rapi/restHandler.go new/fortio-1.55.0/rapi/restHandler.go --- old/fortio-1.54.3/rapi/restHandler.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/rapi/restHandler.go 2023-06-15 01:22:53.000000000 +0200 @@ -231,6 +231,7 @@ durStr := FormValue(r, jd, "t") jitter := (FormValue(r, jd, "jitter") == "on") uniform := (FormValue(r, jd, "uniform") == "on") + logErrors := (FormValue(r, jd, "log-errors") == "on") nocatchup := (FormValue(r, jd, "nocatchup") == "on") stdClient := (FormValue(r, jd, "stdclient") == "on") h2 := (FormValue(r, jd, "h2") == "on") @@ -285,6 +286,7 @@ httpopts.Insecure = httpsInsecure httpopts.Resolve = resolve httpopts.H2 = h2 + httpopts.LogErrors = logErrors // Set the connection reuse range. err = bincommon.ConnectionReuseRange. WithValidator(bincommon.ConnectionReuseRangeValidator(httpopts)). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/release/Dockerfile.in new/fortio-1.55.0/release/Dockerfile.in --- old/fortio-1.54.3/release/Dockerfile.in 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/release/Dockerfile.in 2023-06-15 01:22:53.000000000 +0200 @@ -1,5 +1,5 @@ # Concatenated after ../Dockerfile to create the tgz -FROM docker.io/fortio/fortio.build:v58@sha256:84ab73744546c1b27e2f08143e2c080114c4f1864f760b9fca3908683259d3c4 as stage +FROM docker.io/fortio/fortio.build:v59@sha256:735db577fe940063725cdac8dd2723875f147434f266cbdf0e6970b4fd9b1a07 as stage ARG archs="amd64 arm64 ppc64le s390x" ENV archs=${archs} # Build image defaults to build user, switch back to root for diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/stats/stats_test.go new/fortio-1.55.0/stats/stats_test.go --- old/fortio-1.54.3/stats/stats_test.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/stats/stats_test.go 2023-06-15 01:22:53.000000000 +0200 @@ -43,6 +43,7 @@ c.Print(w, "test1h", []float64{50.0}) expected += "test1h : no data\n" log.Config.LogFileAndLine = false + log.Config.JSON = false log.SetFlags(0) log.SetOutput(w) c.Export().CalcPercentile(50) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/ui/templates/main.html new/fortio-1.55.0/ui/templates/main.html --- old/fortio-1.54.3/ui/templates/main.html 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/ui/templates/main.html 2023-06-15 01:22:53.000000000 +0200 @@ -45,7 +45,8 @@ Duration: <input id="duration" type="text" name="t" size="6" value="3s" /> or run until interrupted:<input type="checkbox" name="t" onchange="toggleDuration(this)" /> or run for exactly <input type="text" name="n" size="6" value="" /> calls. <br /> - Threads/Simultaneous connections: <input type="text" name="c" size="6" value="10" /> <br /> + Threads/Simultaneous connections: <input type="text" name="c" size="6" value="10" /> + Log errors <input type="checkbox" name="log-errors" checked> <br /> Connection reuse range: Min <input type="text" name="connection-reuse-range-min" size="6" value="" /> Max <input type="text" name="connection-reuse-range-max" size="6" value="" /> or Single value: <input type="text" name="connection-reuse-range-value" size="6" value="" /> <br /> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/fortio-1.54.3/ui/uihandler.go new/fortio-1.55.0/ui/uihandler.go --- old/fortio-1.54.3/ui/uihandler.go 2023-05-03 03:33:32.000000000 +0200 +++ new/fortio-1.55.0/ui/uihandler.go 2023-06-15 01:22:53.000000000 +0200 @@ -135,6 +135,7 @@ uniform := (r.FormValue("uniform") == "on") nocatchup := (r.FormValue("nocatchup") == "on") stdClient := (r.FormValue("stdclient") == "on") + logErrors := (r.FormValue("log-errors") == "on") h2 := (r.FormValue("h2") == "on") sequentialWarmup := (r.FormValue("sequential-warmup") == "on") httpsInsecure := (r.FormValue("https-insecure") == "on") @@ -195,6 +196,7 @@ httpopts.Insecure = httpsInsecure httpopts.Resolve = resolve httpopts.H2 = h2 + httpopts.LogErrors = logErrors // Set the connection reuse range. err := bincommon.ConnectionReuseRange. WithValidator(bincommon.ConnectionReuseRangeValidator(httpopts)). ++++++ fortio.obsinfo ++++++ --- /var/tmp/diff_new_pack.neRDMn/_old 2023-06-16 16:54:51.225709883 +0200 +++ /var/tmp/diff_new_pack.neRDMn/_new 2023-06-16 16:54:51.229709906 +0200 @@ -1,5 +1,5 @@ name: fortio -version: 1.54.3 -mtime: 1683077612 -commit: c6665d10f24572d219ed90c65e011a4f8ffdc8d3 +version: 1.55.0 +mtime: 1686784973 +commit: 7d76c8ef1ea2b66f736b3d54d093ed0d2ce2a768 ++++++ vendor.tar.gz ++++++ ++++ 2909 lines of diff (skipped)
