You've already forked prometheus-fail2ban-exporter
							
							Compare commits
	
		
			39 Commits
		
	
	
		
			v0.1.1
			...
			5ca0f1d79c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 5ca0f1d79c | |||
| 95f3b6b56f | |||
| 7d95e6407e | |||
| 6f5dbbba3f | |||
| 425c5777c4 | |||
| 3f2d9103f3 | |||
| e312ba9d12 | |||
| 7a6c5e497b | |||
| 2a9a3a3eb1 | |||
| 211d8aec18 | |||
| be8df93ac9 | |||
| 766bec03de | |||
| 533c019b80 | |||
| 8a5ebcab7c | |||
| 7540303fa3 | |||
| 5388f53963 | |||
| 4d3847ca67 | |||
| be67170a6f | |||
| e4d457d73c | |||
| 3810acad34 | |||
| b8cb19ea7b | |||
| 9eed0fe492 | |||
| 76f5437ab3 | |||
| b291247c3f | |||
| e7d99c78d1 | |||
| ec377df034 | |||
| 43fbbc015e | |||
| 064cf42743 | |||
| 35155770c8 | |||
| e9c4f60cb5 | |||
| 5ae780517a | |||
| 451b3659a1 | |||
| 218c04b34b | |||
| 4a1297b9b8 | |||
| 9cf687c7e4 | |||
| ce09c1b5df | |||
| 5d52473015 | |||
| 8c8a721e39 | |||
| 005648f7d4 | 
							
								
								
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.dockerignore
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1 @@ | ||||
| prometheus-fail2ban-exporter | ||||
							
								
								
									
										610
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										610
									
								
								.drone.yml
									
									
									
									
									
								
							| @@ -1,610 +0,0 @@ | ||||
| --- | ||||
| kind: pipeline | ||||
| type: kubernetes | ||||
| name: linter | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: markdown lint | ||||
|   commands: | ||||
|   - markdownlint *.md | ||||
|   image: git.cryptic.systems/volker.raschek/markdownlint:0.43.0 | ||||
|   resources: | ||||
|     limits: | ||||
|       cpu: 150 | ||||
|       memory: 150M | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   resources: | ||||
|     limits: | ||||
|       cpu: 150 | ||||
|       memory: 150M | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     exclude: | ||||
|     - tag | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: unit-test-amd64 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| platform: | ||||
|   arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: unit-test | ||||
|   commands: | ||||
|   - go test -v ./... | ||||
|   image: docker.io/library/golang:1.24.0 | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     exclude: | ||||
|     - tag | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: unit-test-arm64 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| platform: | ||||
|   arch: arm64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: unit-test | ||||
|   commands: | ||||
|   - go test -v ./... | ||||
|   image: docker.io/library/golang:1.24.0 | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|     include: | ||||
|     - pull_request | ||||
|     - push | ||||
|     exclude: | ||||
|     - tag | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: dry-run-amd64 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - linter | ||||
| - unit-test-amd64 | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: false | ||||
|     dockerfile: Dockerfile | ||||
|     dry_run: true | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     tags: latest-amd64 | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   branch: | ||||
|     exclude: | ||||
|     - master | ||||
|   event: | ||||
|   - pull_request | ||||
|   - push | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: dry-run-arm64-v8 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - linter | ||||
| - unit-test-arm64 | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: arm64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: false | ||||
|     dockerfile: Dockerfile | ||||
|     dry_run: true | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     tags: latest-arm64-v8 | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   branch: | ||||
|     exclude: | ||||
|     - master | ||||
|   event: | ||||
|   - pull_request | ||||
|   - push | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: latest-amd64 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - linter | ||||
| - unit-test-amd64 | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: false | ||||
|     dockerfile: Dockerfile | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     tags: latest-amd64 | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   branch: | ||||
|   - master | ||||
|   event: | ||||
|   - cron | ||||
|   - push | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: latest-arm64-v8 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - linter | ||||
| - unit-test-arm64 | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: arm64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: false | ||||
|     dockerfile: Dockerfile | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     tags: latest-arm64-v8 | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   branch: | ||||
|   - master | ||||
|   event: | ||||
|   - cron | ||||
|   - push | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: kubernetes | ||||
| name: latest-manifest | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - latest-amd64 | ||||
| - latest-arm64-v8 | ||||
|  | ||||
| # docker.io/plugins/manifest only for amd64 architectures available | ||||
| node_selector: | ||||
|   kubernetes.io/os: linux | ||||
|   kubernetes.io/arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build-manifest | ||||
|   image: docker.io/plugins/manifest:1.4.0 | ||||
|   settings: | ||||
|     auto_tag: false | ||||
|     ignore_missing: true | ||||
|     spec: manifest.tmpl | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   resources: | ||||
|     limits: | ||||
|       cpu: 150 | ||||
|       memory: 150M | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   branch: | ||||
|   - master | ||||
|   event: | ||||
|   - cron | ||||
|   - push | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: tagged-amd64 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: amd64 | ||||
|     dockerfile: Dockerfile | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|     build_args: | ||||
|     - VERSION=${DRONE_TAG} | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|   - tag | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: tagged-arm64-v8 | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| platform: | ||||
|   os: linux | ||||
|   arch: arm64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build | ||||
|   image: docker.io/plugins/docker:20.18.7 | ||||
|   settings: | ||||
|     auto_tag: true | ||||
|     auto_tag_suffix: arm64-v8 | ||||
|     dockerfile: Dockerfile | ||||
|     force_tag: true | ||||
|     no_cache: true | ||||
|     purge: true | ||||
|     mirror: | ||||
|       from_secret: docker_io_mirror | ||||
|     registry: git.cryptic.systems | ||||
|     repo: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|     build_args: | ||||
|     - VERSION=${DRONE_TAG} | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|   - tag | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| --- | ||||
| kind: pipeline | ||||
| type: kubernetes | ||||
| name: tagged-manifest | ||||
|  | ||||
| clone: | ||||
|   disable: true | ||||
|  | ||||
| depends_on: | ||||
| - tagged-amd64 | ||||
| - tagged-arm64-v8 | ||||
|  | ||||
| # docker.io/plugins/manifest only for amd64 architectures available | ||||
| node_selector: | ||||
|   kubernetes.io/os: linux | ||||
|   kubernetes.io/arch: amd64 | ||||
|  | ||||
| steps: | ||||
| - name: clone | ||||
|   image: git.cryptic.systems/volker.raschek/git:1.4.0 | ||||
|  | ||||
| - name: build-manifest | ||||
|   image: docker.io/plugins/manifest:1.4.0 | ||||
|   settings: | ||||
|     auto_tag: true | ||||
|     ignore_missing: true | ||||
|     spec: manifest.tmpl | ||||
|     username: | ||||
|       from_secret: git_cryptic_systems_container_registry_user | ||||
|     password: | ||||
|       from_secret: git_cryptic_systems_container_registry_password | ||||
|  | ||||
| - name: email-notification | ||||
|   environment: | ||||
|     SMTP_FROM_ADDRESS: | ||||
|       from_secret: smtp_from_address | ||||
|     SMTP_FROM_NAME: | ||||
|       from_secret: smtp_from_name | ||||
|     SMTP_HOST: | ||||
|       from_secret: smtp_host | ||||
|     SMTP_USERNAME: | ||||
|       from_secret: smtp_username | ||||
|     SMTP_PASSWORD: | ||||
|       from_secret: smtp_password | ||||
|   image: git.cryptic.systems/volker.raschek/drone-email:0.1.5 | ||||
|   resources: | ||||
|     limits: | ||||
|       cpu: 150 | ||||
|       memory: 150M | ||||
|   when: | ||||
|     status: | ||||
|     - changed | ||||
|     - failure | ||||
|  | ||||
| trigger: | ||||
|   event: | ||||
|   - tag | ||||
|   repo: | ||||
|   - volker.raschek/prometheus-fail2ban-exporter | ||||
| @@ -1,15 +1,13 @@ | ||||
| # EditorConfig is awesome: https://EditorConfig.org | ||||
|  | ||||
| # top-most EditorConfig file | ||||
| # Editor configuration, see http://editorconfig.org | ||||
| root = true | ||||
|  | ||||
| [*] | ||||
| indent_style = space | ||||
| indent_size = 2 | ||||
| end_of_line = lf | ||||
| charset = utf-8 | ||||
| trim_trailing_whitespace = true | ||||
| end_of_line = lf | ||||
| indent_size = 2 | ||||
| indent_style = space | ||||
| insert_final_newline = false | ||||
| trim_trailing_whitespace = true | ||||
|  | ||||
| [Makefile] | ||||
| [{Makefile,*.go}] | ||||
| indent_style = tab | ||||
							
								
								
									
										29
									
								
								.gitea/workflows/golang-linters.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								.gitea/workflows/golang-linters.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,29 @@ | ||||
| name: "Lint Golang files" | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [ "opened", "reopened", "synchronize" ] | ||||
|   push: | ||||
|     branches: [ '**' ] | ||||
|     tags-ignore: [ '**' ] | ||||
|   workflow_dispatch: {} | ||||
|  | ||||
| permissions: | ||||
|   contents: read | ||||
|  | ||||
| jobs: | ||||
|   golangci: | ||||
|     name: "Run golang CI linter" | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     strategy: | ||||
|       matrix: | ||||
|         go: [ stable ] | ||||
|         os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ] | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.3.0 | ||||
|     - uses: actions/setup-go@v5.5.0 | ||||
|       with: | ||||
|         go-version: ${{ matrix.go }} | ||||
|     - uses: golangci/golangci-lint-action@v8.0.0 | ||||
|       with: | ||||
| v2.3.1 # renovate: datasource=github-releases depName=golangci/golangci-lint | ||||
							
								
								
									
										42
									
								
								.gitea/workflows/golang-tests.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								.gitea/workflows/golang-tests.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,42 @@ | ||||
| name: "Run Golang tests" | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [ "opened", "reopened", "synchronize" ] | ||||
|   push: | ||||
|     branches: [ '**' ] | ||||
|     tags-ignore: [ '**' ] | ||||
|   workflow_dispatch: {} | ||||
|  | ||||
| jobs: | ||||
|   # integration-test: | ||||
|   #   name: "Run integration tests" | ||||
|   #   runs-on: ${{ matrix.os }} | ||||
|   #   strategy: | ||||
|   #     matrix: | ||||
|   #       go: [ stable ] | ||||
|   #       os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ] | ||||
|   #   steps: | ||||
|   #   - uses: actions/checkout@v4.3.0 | ||||
|   #   - uses: actions/setup-go@v5.5.0 | ||||
|   #     with: | ||||
|   #       go-version: ${{ matrix.go }} | ||||
|   #   - env: | ||||
|   #       GOPROXY: ${{ vars.GOPROXY }} | ||||
|   #     run: make test/integration | ||||
|  | ||||
|   unit-test: | ||||
|     name: "Run unit tests" | ||||
|     runs-on: ${{ matrix.os }} | ||||
|     strategy: | ||||
|       matrix: | ||||
|         go: [ stable ] | ||||
|         os: [ ubuntu-latest-amd64, ubuntu-latest-arm64 ] | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.3.0 | ||||
|     - uses: actions/setup-go@v5.5.0 | ||||
|       with: | ||||
|         go-version: ${{ matrix.go }} | ||||
|     - env: | ||||
|         GOPROXY: ${{ vars.GOPROXY }} | ||||
|       run: make test/unit | ||||
							
								
								
									
										19
									
								
								.gitea/workflows/markdown-linters.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								.gitea/workflows/markdown-linters.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,19 @@ | ||||
| name: "Lint Markdown files" | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     types: [ "opened", "reopened", "synchronize" ] | ||||
|   push: | ||||
|     branches: [ '*' ] | ||||
|     tags-ignore: [ '*' ] | ||||
|   workflow_dispatch: {} | ||||
|  | ||||
| jobs: | ||||
|   markdown-lint: | ||||
|     name: "Run markdown linter" | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.3.0 | ||||
|     - uses: DavidAnson/markdownlint-cli2-action@v20.0.0 | ||||
|       with: | ||||
|         globs: '**/*.md' | ||||
							
								
								
									
										53
									
								
								.gitea/workflows/release.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								.gitea/workflows/release.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,53 @@ | ||||
| name: "Release" | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     tags: [ '**' ] | ||||
|  | ||||
| permissions: | ||||
|   contents: write | ||||
|  | ||||
| jobs: | ||||
|   release: | ||||
|     name: "Release application" | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.3.0 | ||||
|     - uses: docker/setup-qemu-action@v3.6.0 | ||||
|     - uses: actions/setup-go@v5.5.0 | ||||
|       with: | ||||
|         go-version: stable | ||||
|     - uses: docker/login-action@v3.5.0 | ||||
|       with: | ||||
|         registry: git.cryptic.systems | ||||
|         username: ${{ github.repository_owner }} | ||||
|         password: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} | ||||
|     - env: | ||||
|         GITEA_TOKEN: ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} | ||||
|         GONOSUMDB: ${{ vars.GONOSUMDB }} | ||||
|         GOPROXY: ${{ vars.GOPROXY }} | ||||
|       uses: goreleaser/goreleaser-action@v6.3.0 | ||||
|       with: | ||||
|         version: v2.11.2 # renovate: datasource=github-releases depName=goreleaser/goreleaser | ||||
|         args: release --clean | ||||
|  | ||||
|   sync-to-hub-docker-io: | ||||
|     name: "Upload Images to docker.io" | ||||
|     needs: | ||||
|     - release | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|     - name: Copy images to docker.io | ||||
|       run: | | ||||
|         TAG=$(echo ${{ github.ref_name }} | sed 's/v//gm') | ||||
|  | ||||
|         apt-get update --yes | ||||
|         apt-get install --yes skopeo | ||||
|         skopeo copy \ | ||||
|           --all \ | ||||
|           --dest-password ${{ secrets.DOCKER_IO_PASSWORD }} \ | ||||
|           --dest-username ${{ secrets.DOCKER_IO_USERNAME }} \ | ||||
|           --src-password ${{ secrets.GIT_CRYPTIC_SYSTEMS_PACKAGE_REGISTRY_TOKEN }} \ | ||||
|           --src-username volker.raschek \ | ||||
|             docker://git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter:${TAG} \ | ||||
|             docker://docker.io/volkerraschek/prometheus-fail2ban-exporter:${TAG} | ||||
| @@ -1,30 +0,0 @@ | ||||
| name: Run unit tests | ||||
|  | ||||
| on: | ||||
|   pull_request: | ||||
|     branches: | ||||
|     - '*' | ||||
|     types: [ "opened", "reopened", "synchronize" ] | ||||
|   push: | ||||
|     branches: | ||||
|     - '*' | ||||
|   workflow_dispatch: {} | ||||
|  | ||||
| jobs: | ||||
|   test: | ||||
|     container: | ||||
|       image: docker.io/library/golang:1.24.0 | ||||
|     runs-on: | ||||
|     - ubuntu-latest | ||||
|     steps: | ||||
|     - name: Install tooling | ||||
|       run: | | ||||
|         apt-get update --yes | ||||
|         apt-get upgrade --yes | ||||
|         apt-get install --yes git npm | ||||
|     - uses: actions/checkout@v4 | ||||
|     - env: | ||||
|         GOPROXY: ${{ vars.GOPROXY }} | ||||
|         GONOSUMDB: ${{ vars.GONOSUMDB }} | ||||
|       name: Execute containerized unit test | ||||
|       run: make test | ||||
							
								
								
									
										20
									
								
								.gitea/workflows/update-docker-hub-description.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								.gitea/workflows/update-docker-hub-description.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,20 @@ | ||||
| name: Update Docker Hub Description | ||||
|  | ||||
| on: | ||||
|   push: | ||||
|     branches: [ 'master' ] | ||||
|     paths: [ 'README.md' ] | ||||
|   workflow_dispatch: {} | ||||
|  | ||||
| jobs: | ||||
|   update-description-on-hub-docker-io: | ||||
|     runs-on: | ||||
|     - ubuntu-latest | ||||
|     steps: | ||||
|     - uses: actions/checkout@v4.3.0 | ||||
|     - uses: peter-evans/dockerhub-description@v4.0.2 | ||||
|       with: | ||||
|         username: ${{ secrets.DOCKER_IO_USERNAME }} | ||||
|         password: ${{ secrets.DOCKER_IO_PASSWORD }} | ||||
|         repository: volkerraschek/prometheus-fail2ban-exporter | ||||
|         readme-filepath: README.md | ||||
							
								
								
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										9
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -1,8 +1,3 @@ | ||||
| .idea/ | ||||
| vendor/ | ||||
| *.iml | ||||
|  | ||||
| build/ | ||||
| dist/ | ||||
|  | ||||
| prometheus-fail2ban-exporter | ||||
| coverage.txt | ||||
| dist | ||||
							
								
								
									
										13
									
								
								.golangci.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.golangci.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| version: "2" | ||||
| linters: | ||||
|   default: standard | ||||
|   enable: | ||||
|   - errname | ||||
|   - gosec | ||||
|  | ||||
|   exclusions: | ||||
|     rules: [] | ||||
|     warn-unused: true | ||||
|  | ||||
| run: | ||||
|   tests: true | ||||
							
								
								
									
										175
									
								
								.goreleaser.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										175
									
								
								.goreleaser.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,175 @@ | ||||
| project_name: prometheus-fail2ban-exporter | ||||
|  | ||||
| archives: | ||||
| - formats: [ "tar.xz" ] | ||||
|   files: | ||||
|   - README.md | ||||
|   - LICENSE | ||||
|  | ||||
| before: | ||||
|   hooks: | ||||
|   - go mod tidy | ||||
|  | ||||
| builds: | ||||
| - main: main.go | ||||
|   binary: >- | ||||
|     {{ .ProjectName }}- | ||||
|     {{- .Version }}- | ||||
|     {{- .Os }}- | ||||
|     {{- if eq .Arch "amd64" }}amd64 | ||||
|     {{- else if eq .Arch "amd64_v1" }}amd64 | ||||
|     {{- else }}{{ .Arch }}{{ end }} | ||||
|     {{- if .Arm }}-{{ .Arm }}{{ end }} | ||||
|   env: | ||||
|   - CGO_ENABLED=0 | ||||
|   - GONOSUMDB={{ .Env.GONOSUMDB }} | ||||
|   - GOPROXY={{ .Env.GOPROXY }} | ||||
|   goos: | ||||
|   - linux | ||||
|   goarch: | ||||
|   - amd64 | ||||
|   - arm | ||||
|   - arm64 | ||||
|   - riscv64 | ||||
|   goarm: | ||||
|   - "6" | ||||
|   - "7" | ||||
|   flags: | ||||
|   - -trimpath | ||||
|   ldflags: | ||||
|   - -s -w -X 'main.version={{ trimprefix .Tag "v" }}' -X 'main.date={{ time "2006-01-02T15:04:05Z07:00" }}' | ||||
|  | ||||
| changelog: | ||||
|   filters: | ||||
|     exclude: | ||||
|     - '^chore' | ||||
|     - '^docs' | ||||
|     - '^test' | ||||
|     - Merge pull request | ||||
|     - Merge branch | ||||
|     - go mod tidy | ||||
|   format: "{{.SHA}}: {{.Message}} (@{{.AuthorUsername}})" | ||||
|   groups: | ||||
|   - title: Features | ||||
|     regexp: '^.*?feat(\([[:word:]]+\))??!?:.+$' | ||||
|     order: 0 | ||||
|   - title: "Bug fixes" | ||||
|     regexp: '^.*?fix(\([[:word:]]+\))??!?:.+$' | ||||
|     order: 1 | ||||
|   - title: Others | ||||
|     order: 999 | ||||
|   sort: asc | ||||
|   use: git | ||||
|  | ||||
| dockers: | ||||
| - build_flag_templates: | ||||
|   - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||||
|   - --label=org.opencontainers.image.description={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.documentation={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.revision={{ .FullCommit }} | ||||
|   - --label=org.opencontainers.image.source={{ .GitURL }} | ||||
|   - --label=org.opencontainers.image.title={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.url=https://git.cryptic.systems/volker.raschek/{{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.version={{ trimprefix .Tag "v" }} | ||||
|   - --platform=linux/amd64 | ||||
|   - --pull | ||||
|   dockerfile: Dockerfile | ||||
|   goarch: amd64 | ||||
|   goos: linux | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-amd64' | ||||
|   skip_push: false | ||||
|   use: buildx | ||||
|  | ||||
| - build_flag_templates: | ||||
|   - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||||
|   - --label=org.opencontainers.image.description={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.documentation={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.revision={{ .FullCommit }} | ||||
|   - --label=org.opencontainers.image.source={{ .GitURL }} | ||||
|   - --label=org.opencontainers.image.title={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.url=https://git.cryptic.systems/volker.raschek/{{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.version={{ trimprefix .Tag "v" }} | ||||
|   - --platform=linux/arm/v6 | ||||
|   - --pull | ||||
|   dockerfile: Dockerfile | ||||
|   goarch: arm | ||||
|   goarm: "6" | ||||
|   goos: linux | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm-v6' | ||||
|   skip_push: false | ||||
|   use: buildx | ||||
|  | ||||
| - build_flag_templates: | ||||
|   - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||||
|   - --label=org.opencontainers.image.description={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.documentation={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.revision={{ .FullCommit }} | ||||
|   - --label=org.opencontainers.image.source={{ .GitURL }} | ||||
|   - --label=org.opencontainers.image.title={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.url=https://git.cryptic.systems/volker.raschek/{{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.version={{ trimprefix .Tag "v" }} | ||||
|   - --platform=linux/arm/v7 | ||||
|   - --pull | ||||
|   dockerfile: Dockerfile | ||||
|   goarch: arm | ||||
|   goarm: "7" | ||||
|   goos: linux | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm-v7' | ||||
|   skip_push: false | ||||
|   use: buildx | ||||
|  | ||||
| - build_flag_templates: | ||||
|   - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||||
|   - --label=org.opencontainers.image.description={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.documentation={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.revision={{ .FullCommit }} | ||||
|   - --label=org.opencontainers.image.source={{ .GitURL }} | ||||
|   - --label=org.opencontainers.image.title={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.url=https://git.cryptic.systems/volker.raschek/{{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.version={{ trimprefix .Tag "v" }} | ||||
|   - --platform=linux/arm64 | ||||
|   - --pull | ||||
|   dockerfile: Dockerfile | ||||
|   goarch: arm64 | ||||
|   goos: linux | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm64' | ||||
|   skip_push: false | ||||
|   use: buildx | ||||
|  | ||||
| - build_flag_templates: | ||||
|   - --label=org.opencontainers.image.created={{ time "2006-01-02T15:04:05Z07:00" }} | ||||
|   - --label=org.opencontainers.image.description={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.documentation={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.revision={{ .FullCommit }} | ||||
|   - --label=org.opencontainers.image.source={{ .GitURL }} | ||||
|   - --label=org.opencontainers.image.title={{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.url=https://git.cryptic.systems/volker.raschek/{{ .ProjectName }} | ||||
|   - --label=org.opencontainers.image.version={{ trimprefix .Tag "v" }} | ||||
|   - --platform=linux/riscv64 | ||||
|   - --pull | ||||
|   dockerfile: Dockerfile | ||||
|   goarch: riscv64 | ||||
|   goos: linux | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-riscv64' | ||||
|   skip_push: false | ||||
|   use: buildx | ||||
|  | ||||
| docker_manifests: | ||||
| - name_template: 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}' | ||||
|   image_templates: | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-amd64' | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm-v6' | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm-v7' | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-arm64' | ||||
|   - 'git.cryptic.systems/volker.raschek/{{ .ProjectName }}:{{ trimprefix .Tag "v" }}-riscv64' | ||||
|  | ||||
| gitea_urls: | ||||
|   api: https://git.cryptic.systems/api/v1 | ||||
|   download: https://git.cryptic.systems | ||||
|  | ||||
| version: 2 | ||||
| @@ -45,19 +45,17 @@ MD012: | ||||
| # MD013/line-length - Line length | ||||
| MD013: | ||||
|   # Number of characters | ||||
|   line_length: 80 | ||||
|   line_length: 120 | ||||
|   # Number of characters for headings | ||||
|   heading_line_length: 80 | ||||
|   heading_line_length: 120 | ||||
|   # Number of characters for code blocks | ||||
|   code_block_line_length: 80 | ||||
|   code_block_line_length: 120 | ||||
|   # Include code blocks | ||||
|   code_blocks: false | ||||
|   # Include tables | ||||
|   tables: false | ||||
|   # Include headings | ||||
|   headings: true | ||||
|   # Include headings | ||||
|   headers: true | ||||
|   # Strict length checking | ||||
|   strict: false | ||||
|   # Stern length checking | ||||
| @@ -70,11 +68,6 @@ MD022: | ||||
|   # Blank lines below heading | ||||
|   lines_below: 1 | ||||
|  | ||||
| # MD024/no-duplicate-heading/no-duplicate-header - Multiple headings with the same content | ||||
| MD024: | ||||
|   # Only check sibling headings | ||||
|   allow_different_nesting: true | ||||
|  | ||||
| # MD025/single-title/single-h1 - Multiple top-level headings in the same document | ||||
| MD025: | ||||
|   # Heading level | ||||
|   | ||||
							
								
								
									
										18
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								Dockerfile
									
									
									
									
									
								
							| @@ -1,19 +1,5 @@ | ||||
| FROM docker.io/library/golang:1.24.0 AS build | ||||
| FROM scratch AS build | ||||
|  | ||||
| WORKDIR /workspace | ||||
| ADD . /workspace | ||||
|  | ||||
| RUN apt update --yes && \ | ||||
|     apt install --yes build-essential && \ | ||||
|     make install \ | ||||
|       PREFIX=/usr \ | ||||
|       DESTDIR=/app \ | ||||
|       EXECUTABLE=prometheus-fail2ban-exporter | ||||
|  | ||||
| FROM docker.io/library/debian:12-slim | ||||
|  | ||||
| COPY --from=build /app / | ||||
|  | ||||
| EXPOSE 9191 | ||||
| COPY prometheus-fail2ban-exporter-* /usr/bin/prometheus-fail2ban-exporter | ||||
|  | ||||
| ENTRYPOINT [ "/usr/bin/prometheus-fail2ban-exporter" ] | ||||
							
								
								
									
										169
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										169
									
								
								Makefile
									
									
									
									
									
								
							| @@ -1,85 +1,118 @@ | ||||
| EXECUTABLE=prometheus-fail2ban-exporter | ||||
| VERSION?=$(shell git describe --abbrev=0)+hash.$(shell git rev-parse --short HEAD) | ||||
|  | ||||
| # Destination directory and prefix to place the compiled binaries, documentaions | ||||
| # and other files. | ||||
| DESTDIR?= | ||||
| PREFIX?=/usr/local | ||||
| EXECUTABLE?=prometheus-fail2ban-exporter | ||||
|  | ||||
| # CONTAINER_RUNTIME | ||||
| # The CONTAINER_RUNTIME variable will be used to specified the path to a | ||||
| # container runtime. This is needed to start and run a container image. | ||||
| CONTAINER_RUNTIME?=$(shell which podman) | ||||
|  | ||||
| # List make commands | ||||
| .PHONY: ls | ||||
| ls: | ||||
| 	cat Makefile | grep "^[a-zA-Z#].*" | cut -d ":" -f 1 | sed s';#;\n#;'g | ||||
| # PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME | ||||
| # Defines the name of the new container to be built using several variables. | ||||
| PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME:=git.cryptic.systems | ||||
| PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER:=volker.raschek | ||||
|  | ||||
| # Run project tests | ||||
| .PHONY: test | ||||
| test: | ||||
| 	GONOSUMDB=${GONOSUMDB} \ | ||||
| 	GOPROXY=${GOPROXY} \ | ||||
| 		go test ./... -v -race | ||||
| PROM_FAIL2BAN_EXP_IMAGE_NAMESPACE?=${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER} | ||||
| PROM_FAIL2BAN_EXP_IMAGE_NAME:=${EXECUTABLE} | ||||
| PROM_FAIL2BAN_EXP_IMAGE_VERSION?=latest | ||||
| PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED=${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME}/${PROM_FAIL2BAN_EXP_IMAGE_NAMESPACE}/${PROM_FAIL2BAN_EXP_IMAGE_NAME}:${PROM_FAIL2BAN_EXP_IMAGE_VERSION} | ||||
|  | ||||
| # Look for "suspicious constructs" in source code | ||||
| .PHONY: vet | ||||
| vet: | ||||
| 	GONOSUMDB=${GONOSUMDB} \ | ||||
| 	GOPROXY=${GOPROXY} \ | ||||
| 		go vet ./... | ||||
| # BIN | ||||
| # ============================================================================== | ||||
| prometheus-fail2ban-exporter: | ||||
| 	CGO_ENABLED=0 \ | ||||
| 	GOPROXY=$(shell go env GOPROXY) \ | ||||
| 		go build -ldflags "-X 'main.version=${VERSION}' -X 'main.date=$(shell date --rfc-3339=seconds )'" -o ${@} main.go | ||||
|  | ||||
| # Format code | ||||
| .PHONY: fmt | ||||
| fmt: | ||||
| 	GONOSUMDB=${GONOSUMDB} \ | ||||
| 	GOPROXY=${GOPROXY} \ | ||||
| 		go mod tidy | ||||
| # CLEAN | ||||
| # ============================================================================== | ||||
| PHONY+=clean | ||||
| clean: | ||||
| 	rm --force --recursive prometheus-fail2ban-exporter | ||||
|  | ||||
| 	GONOSUMDB=${GONOSUMDB} \ | ||||
| 	GOPROXY=${GOPROXY} \ | ||||
| 		go fmt ./... | ||||
| # TESTS | ||||
| # ============================================================================== | ||||
| PHONY+=test/unit | ||||
| test/unit: | ||||
| 	CGO_ENABLED=0 \ | ||||
| 	GOPROXY=$(shell go env GOPROXY) \ | ||||
| 		go test -v -p 1 -coverprofile=coverage.txt -covermode=count -timeout 1200s ./... | ||||
|  | ||||
| # Check for unformatted go code | ||||
| .PHONY: check/fmt | ||||
| check/fmt: | ||||
| 	test -z $(shell gofmt -l .) | ||||
| PHONY+=test/integration | ||||
| test/integration: | ||||
| 	CGO_ENABLED=0 \ | ||||
| 	GOPROXY=$(shell go env GOPROXY) \ | ||||
| 		go test -v -p 1 -count=1 -timeout 1200s ./it/... | ||||
|  | ||||
| # Build project | ||||
| .PHONY: build | ||||
| build: | ||||
| 	CGO_ENABLED=0 | ||||
| 	GONOSUMDB=${GONOSUMDB} \ | ||||
| 	GOPROXY=${GOPROXY} \ | ||||
| 		go build \ | ||||
| 			-ldflags "\ | ||||
| 				-X main.version=${shell git describe --tags} \ | ||||
| 				-X main.commit=${shell git rev-parse HEAD} \ | ||||
| 				-X main.date=${shell date --iso-8601=seconds} \ | ||||
| 				-X main.builtBy=manual \ | ||||
| 			" \ | ||||
| 			-trimpath \ | ||||
| 			-o ${EXECUTABLE} \ | ||||
| 			exporter.go | ||||
| PHONY+=test/coverage | ||||
| test/coverage: test/unit | ||||
| 	CGO_ENABLED=0 \ | ||||
| 	GOPROXY=$(shell go env GOPROXY) \ | ||||
| 		go tool cover -html=coverage.txt | ||||
|  | ||||
| # build container-image | ||||
| .PHONY: build/container-image | ||||
| build/container-image: | ||||
| # GOLANGCI-LINT | ||||
| # ============================================================================== | ||||
| PHONY+=golangci-lint | ||||
| golangci-lint: | ||||
| 	golangci-lint run --concurrency=$(shell nproc) | ||||
|  | ||||
| # INSTALL | ||||
| # ============================================================================== | ||||
| PHONY+=uninstall | ||||
| install: prometheus-fail2ban-exporter | ||||
| 	install --directory ${DESTDIR}/etc/bash_completion.d | ||||
| 	./prometheus-fail2ban-exporter completion bash > ${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} | ||||
|  | ||||
| 	install --directory ${DESTDIR}${PREFIX}/bin | ||||
| 	install --mode 0755 ${EXECUTABLE} ${DESTDIR}${PREFIX}/bin/${EXECUTABLE} | ||||
|  | ||||
| 	install --directory ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} | ||||
| 	install --mode 0644 LICENSE ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE}/LICENSE | ||||
|  | ||||
| 	install --directory ${DESTDIR}${PREFIX}/systemd/system | ||||
| 	install --mode 0644 systemd/systemd.service ${DESTDIR}${PREFIX}/systemd/system/${EXECUTABLE}.service | ||||
| 	sed --in-place --regexp-extended 's/EXECUTABLE/${EXECUTABLE}/gm' ${DESTDIR}${PREFIX}/systemd/system/${EXECUTABLE}.service | ||||
|  | ||||
| # UNINSTALL | ||||
| # ============================================================================== | ||||
| PHONY+=uninstall | ||||
| uninstall: | ||||
| 	-rm --force --recursive \ | ||||
| 		${DESTDIR}/etc/bash_completion.d/${EXECUTABLE} \ | ||||
| 		${DESTDIR}${PREFIX}/bin/${EXECUTABLE} \ | ||||
| 		${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} | ||||
|  | ||||
| # BUILD CONTAINER IMAGE | ||||
| # ============================================================================== | ||||
| PHONY+=container-image/build | ||||
| container-image/build: | ||||
| 	${CONTAINER_RUNTIME} build \ | ||||
| 		--tag ${EXECUTABLE} \ | ||||
| 		--build-arg VERSION=${VERSION} \ | ||||
| 		--file Dockerfile \ | ||||
| 		--no-cache \ | ||||
| 		--pull \ | ||||
| 		--tag ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} \ | ||||
| 		. | ||||
|  | ||||
| .PHONY: install | ||||
| install: build | ||||
| 	mkdir --parents ${DESTDIR}/usr/lib/systemd/system | ||||
| 	sed -e "s/EXECUTABLE/${EXECUTABLE}/gm" systemd/systemd.service > ${DESTDIR}/usr/lib/systemd/system/${EXECUTABLE}.service | ||||
| 	chmod 0644 ${DESTDIR}/usr/lib/systemd/system/${EXECUTABLE}.service | ||||
| # DELETE CONTAINER IMAGE | ||||
| # ============================================================================== | ||||
| PHONY:=container-image/delete | ||||
| container-image/delete: | ||||
| 	- ${CONTAINER_RUNTIME} image rm ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} | ||||
|  | ||||
| 	install -D --mode 0755 --target-directory ${DESTDIR}${PREFIX}/bin ${EXECUTABLE} | ||||
| # PUSH CONTAINER IMAGE | ||||
| # ============================================================================== | ||||
| PHONY+=container-image/push | ||||
| container-image/push: | ||||
| 	echo ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_PASSWORD} | ${CONTAINER_RUNTIME} login ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_NAME} --username ${PROM_FAIL2BAN_EXP_IMAGE_REGISTRY_USER} --password-stdin | ||||
| 	${CONTAINER_RUNTIME} push ${PROM_FAIL2BAN_EXP_IMAGE_FULLY_QUALIFIED} | ||||
|  | ||||
| # NOTE: Set restrict file permissions by default to protect optional basic auth credentials | ||||
| 	install -D --mode 0600 env ${DESTDIR}/etc/conf.d/${EXECUTABLE} | ||||
|  | ||||
| 	install -D --mode 0755 --target-directory ${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE} LICENSE | ||||
|  | ||||
| .PHONY: uninstall | ||||
| uninstall: | ||||
| 	-rm --recursive --force \ | ||||
| 		${DESTDIR}${PREFIX}/bin/${EXECUTABLE} \ | ||||
| 		${DESTDIR}/usr/lib/systemd/system/${EXECUTABLE}.service \ | ||||
| 		${DESTDIR}/etc/conf.d/${EXECUTABLE} \ | ||||
| 		${DESTDIR}${PREFIX}/share/licenses/${EXECUTABLE}/LICENSE | ||||
| # PHONY | ||||
| # ============================================================================== | ||||
| # Declare the contents of the PHONY variable as phony.  We keep that information | ||||
| # in a variable so we can use it in if_changed. | ||||
| .PHONY: ${PHONY} | ||||
							
								
								
									
										68
									
								
								README.md
									
									
									
									
									
								
							
							
						
						
									
										68
									
								
								README.md
									
									
									
									
									
								
							| @@ -1,11 +1,7 @@ | ||||
| # prometheus-fail2ban-exporter | ||||
|  | ||||
| [](https://drone.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter) | ||||
|  | ||||
| This is a fork of Hector's fail2ban | ||||
| [exporter](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter). This | ||||
| fork contains some changes to get the application running in a kubernetes | ||||
| cluster. | ||||
| This is a fork of Hector's fail2ban [exporter](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter). This fork | ||||
| contains some changes to get the application running in a kubernetes cluster. | ||||
|  | ||||
| ## Table of Contents | ||||
|  | ||||
| @@ -21,8 +17,8 @@ The exporter can be run as a standalone binary or a docker container. | ||||
|  | ||||
| ### 1.1. Standalone | ||||
|  | ||||
| The following command will start collecting metrics from the | ||||
| `/var/run/fail2ban/fail2ban.sock` file and expose them on port `9191`. | ||||
| The following command will start collecting metrics from the `/var/run/fail2ban/fail2ban.sock` file and expose them on | ||||
| port `9191`. | ||||
|  | ||||
| ```bash | ||||
| $ fail2ban_exporter --collector.f2b.socket=/var/run/fail2ban/fail2ban.sock --web.listen-address=":9191" | ||||
| @@ -35,12 +31,10 @@ $ fail2ban_exporter --collector.f2b.socket=/var/run/fail2ban/fail2ban.sock --web | ||||
| ``` | ||||
|  | ||||
| Binary files for each release can be found on the | ||||
| [releases](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/-/releases) | ||||
| page. | ||||
| [releases](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/-/releases) page. | ||||
|  | ||||
| There is also an [example systemd service | ||||
| file](/_examples/systemd/fail2ban_exporter.service) included in the repository. | ||||
| This is a starting point to run the exporter as a service. | ||||
| There is also an [example systemd service file](/_examples/systemd/fail2ban_exporter.service) included in the | ||||
| repository. This is a starting point to run the exporter as a service. | ||||
|  | ||||
| ### 1.2. Docker | ||||
|  | ||||
| @@ -68,14 +62,11 @@ services: | ||||
| ``` | ||||
|  | ||||
| Use the `:latest` tag to get the latest stable release. See the [registry | ||||
| page](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/container_registry) | ||||
| for all available tags. | ||||
| page](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/container_registry) for all available tags. | ||||
|  | ||||
| **NOTE:** While it is possible to mount the `fail2ban.sock` file directly, it is | ||||
| recommended to mount the parent folder instead. The `.sock` file is deleted by | ||||
| fail2ban on shutdown and re-created on startup and this causes problems for the | ||||
| docker mount. See [this | ||||
| reply](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/-/issues/11#note_665003499) | ||||
| **NOTE:** While it is possible to mount the `fail2ban.sock` file directly, it is recommended to mount the parent folder | ||||
| instead. The `.sock` file is deleted by fail2ban on shutdown and re-created on startup and this causes problems for the | ||||
| docker mount. See [this reply](https://gitlab.com/hectorjsmith/fail2ban-prometheus-exporter/-/issues/11#note_665003499) | ||||
| for more details. | ||||
|  | ||||
| ## 2. Metrics | ||||
| @@ -117,20 +108,18 @@ Status for the jail: sshd | ||||
|  | ||||
| ### 2.1. Grafana | ||||
|  | ||||
| The metrics exported by this tool are compatible with Prometheus and Grafana. A | ||||
| sample grafana dashboard can be found in the | ||||
| [grafana.json](/_examples/grafana/dashboard.json) file. Just import the contents | ||||
| of this file into a new Grafana dashboard to get started. | ||||
| The metrics exported by this tool are compatible with Prometheus and Grafana. A sample grafana dashboard can be found in | ||||
| the [grafana.json](/_examples/grafana/dashboard.json) file. Just import the contents of this file into a new Grafana | ||||
| dashboard to get started. | ||||
|  | ||||
| The dashboard supports displaying data from multiple exporters. Use the | ||||
| `instance` dashboard variable to select which ones to display. | ||||
| The dashboard supports displaying data from multiple exporters. Use the `instance` dashboard variable to select which | ||||
| ones to display. | ||||
|  | ||||
| *(Sample dashboard is compatible with Grafana `9.1.8` and above)* | ||||
|  | ||||
| ## 3. Configuration | ||||
|  | ||||
| The exporter is configured with CLI flags and environment variables. | ||||
| There are no configuration files. | ||||
| The exporter is configured with CLI flags and environment variables. There are no configuration files. | ||||
|  | ||||
| ### CLI flags | ||||
|  | ||||
| @@ -164,8 +153,7 @@ Flags: | ||||
|  | ||||
| ### Environment variables | ||||
|  | ||||
| Each environment variable corresponds to a CLI flag. | ||||
| If both are specified, the CLI flag takes precedence. | ||||
| Each environment variable corresponds to a CLI flag. If both are specified, the CLI flag takes precedence. | ||||
|  | ||||
| | Environment variable            | Corresponding CLI flag                            | | ||||
| |---------------------------------|---------------------------------------------------| | ||||
| @@ -185,23 +173,18 @@ Building from source has the following dependencies: | ||||
|  | ||||
| From there, simply run `make build` | ||||
|  | ||||
| This will download the necessary dependencies and build a `fail2ban_exporter` | ||||
| binary in the root of the project. | ||||
| This will download the necessary dependencies and build a `fail2ban_exporter` binary in the root of the project. | ||||
|  | ||||
| ## 5. Textfile metrics | ||||
|  | ||||
| For more flexibility the exporter also allows exporting metrics collected from a | ||||
| text file. | ||||
| For more flexibility the exporter also allows exporting metrics collected from a text file. | ||||
|  | ||||
| To enable textfile metrics provide the directory to read files from with the | ||||
| `--collector.textfile.directory` flag. | ||||
| To enable textfile metrics provide the directory to read files from with the `--collector.textfile.directory` flag. | ||||
|  | ||||
| Metrics collected from these files will be exposed directly alongside the other | ||||
| metrics without any additional processing. This means that it is the | ||||
| responsibility of the file creator to ensure the format is correct. | ||||
| Metrics collected from these files will be exposed directly alongside the other metrics without any additional | ||||
| processing. This means that it is the responsibility of the file creator to ensure the format is correct. | ||||
|  | ||||
| By exporting textfile metrics an extra metric is also exported with an error | ||||
| count for each file: | ||||
| By exporting textfile metrics an extra metric is also exported with an error count for each file: | ||||
|  | ||||
| ```text | ||||
| # HELP textfile_error Checks for errors while reading text files | ||||
| @@ -213,8 +196,7 @@ textfile_error{path="file.prom"} 0 | ||||
|  | ||||
| ### Running in Docker | ||||
|  | ||||
| To collect textfile metrics inside a docker container, a couple of things need | ||||
| to be done: | ||||
| To collect textfile metrics inside a docker container, a couple of things need to be done: | ||||
|  | ||||
| 1. Mount the folder with the metrics files | ||||
| 2. Set the `F2B_COLLECTOR_TEXT_PATH` environment variable | ||||
|   | ||||
| @@ -1,7 +1,9 @@ | ||||
| # Systemd | ||||
|  | ||||
| The `.service` file in this directory should be copied to the `/etc/systemd/system/` folder. | ||||
|  | ||||
| - It expects the binary file to be installed at `/usr/sbin/fail2ban_exporter`. | ||||
| - It expects a user named `fail2ban_exporter` to exist. This user should not have a shell or any special privileges aside from read-access to the fail2ban socket file. | ||||
| - It expects a user named `fail2ban_exporter` to exist. This user should not have a shell or any special privileges | ||||
|   aside from read-access to the fail2ban socket file. | ||||
|  | ||||
| The `ExecStart` line can be modified to add any custom CLI flags. | ||||
|   | ||||
| @@ -74,7 +74,7 @@ func validateFlags(cliCtx *kong.Context) { | ||||
| 		} | ||||
| 	} | ||||
| 	if !flagsValid { | ||||
| 		cliCtx.PrintUsage(false) | ||||
| 		_ = cliCtx.PrintUsage(false) | ||||
| 		fmt.Println() | ||||
| 		for i := 0; i < len(messages); i++ { | ||||
| 			fmt.Println(messages[i]) | ||||
|   | ||||
| @@ -50,7 +50,7 @@ func (c *Collector) Collect(ch chan<- prometheus.Metric) { | ||||
| 			os.Exit(1) | ||||
| 		} | ||||
| 	} else { | ||||
| 		defer s.Close() | ||||
| 		defer func() { _ = s.Close() }() | ||||
| 	} | ||||
|  | ||||
| 	c.collectServerUpMetric(ch, s) | ||||
|   | ||||
							
								
								
									
										20
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								go.mod
									
									
									
									
									
								
							| @@ -2,26 +2,24 @@ module git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter | ||||
|  | ||||
| go 1.23.0 | ||||
|  | ||||
| toolchain go1.24.0 | ||||
| toolchain go1.24.6 | ||||
|  | ||||
| require ( | ||||
| 	github.com/alecthomas/kong v1.8.1 | ||||
| 	github.com/alecthomas/kong v1.12.1 | ||||
| 	github.com/kisielk/og-rek v1.3.0 | ||||
| 	github.com/nlpodyssey/gopickle v0.3.0 | ||||
| 	github.com/prometheus/client_golang v1.21.0 | ||||
| 	github.com/prometheus/client_golang v1.23.0 | ||||
| ) | ||||
|  | ||||
| require ( | ||||
| 	github.com/aristanetworks/gomap v0.0.0-20240919214256-2b26376628e1 // indirect | ||||
| 	github.com/beorn7/perks v1.0.1 // indirect | ||||
| 	github.com/cespare/xxhash/v2 v2.3.0 // indirect | ||||
| 	github.com/klauspost/compress v1.18.0 // indirect | ||||
| 	github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect | ||||
| 	github.com/prometheus/client_model v0.6.1 // indirect | ||||
| 	github.com/prometheus/common v0.62.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.15.1 // indirect | ||||
| 	golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 // indirect | ||||
| 	golang.org/x/sys v0.30.0 // indirect | ||||
| 	golang.org/x/text v0.22.0 // indirect | ||||
| 	google.golang.org/protobuf v1.36.5 // indirect | ||||
| 	github.com/prometheus/client_model v0.6.2 // indirect | ||||
| 	github.com/prometheus/common v0.65.0 // indirect | ||||
| 	github.com/prometheus/procfs v0.16.1 // indirect | ||||
| 	golang.org/x/sys v0.33.0 // indirect | ||||
| 	golang.org/x/text v0.25.0 // indirect | ||||
| 	google.golang.org/protobuf v1.36.6 // indirect | ||||
| ) | ||||
|   | ||||
							
								
								
									
										70
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								go.sum
									
									
									
									
									
								
							| @@ -1,56 +1,50 @@ | ||||
| github.com/alecthomas/assert/v2 v2.6.0 h1:o3WJwILtexrEUk3cUVal3oiQY2tfgr/FHWiz/v2n4FU= | ||||
| github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= | ||||
| github.com/alecthomas/kong v0.9.0 h1:G5diXxc85KvoV2f0ZRVuMsi45IrBgx9zDNGNj165aPA= | ||||
| github.com/alecthomas/kong v0.9.0/go.mod h1:Y47y5gKfHp1hDc7CH7OeXgLIpp+Q2m1Ni0L5s3bI8Os= | ||||
| github.com/alecthomas/kong v1.8.1 h1:6aamvWBE/REnR/BCq10EcozmcpUPc5aGI1lPAWdB0EE= | ||||
| github.com/alecthomas/kong v1.8.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= | ||||
| github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= | ||||
| github.com/alecthomas/kong v1.12.1 h1:iq6aMJDcFYP9uFrLdsiZQ2ZMmcshduyGv4Pek0MQPW0= | ||||
| github.com/alecthomas/kong v1.12.1/go.mod h1:p2vqieVMeTAnaC83txKtXe8FLke2X07aruPWXyMPQrU= | ||||
| github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc= | ||||
| github.com/aristanetworks/gomap v0.0.0-20230726210543-f4e41046dced h1:HxlRMDx/VeRqzj3nvqX9k4tjeBcEIkoNHDJPsS389hs= | ||||
| github.com/aristanetworks/gomap v0.0.0-20230726210543-f4e41046dced/go.mod h1:p7lmI+ecoe1RTyD11SPXWsSQ3H+pJ4cp5y7vtKW4QdM= | ||||
| github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= | ||||
| github.com/aristanetworks/gomap v0.0.0-20240919214256-2b26376628e1 h1:D5mrqTj0YyG8O2A2SUCuPc2Qf68vyTBaWChSBAJtYJk= | ||||
| github.com/aristanetworks/gomap v0.0.0-20240919214256-2b26376628e1/go.mod h1:v/+Hpx3wuPnPWEwT1unZJsNUe4Pu/y1Y+qAf+xj0Ykg= | ||||
| github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= | ||||
| github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= | ||||
| github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= | ||||
| github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= | ||||
| github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= | ||||
| 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/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= | ||||
| github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= | ||||
| github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= | ||||
| github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= | ||||
| github.com/kisielk/og-rek v1.3.0 h1:lTXdQXqFETZKA//FWH4RBNAuiJ/dofxIwHAidoUZoMk= | ||||
| github.com/kisielk/og-rek v1.3.0/go.mod h1:4at7oxyfBTDilURhNCf7irHWtosJlJl9uyqUqAkrP4w= | ||||
| github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= | ||||
| github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= | ||||
| github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= | ||||
| github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= | ||||
| github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= | ||||
| github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= | ||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= | ||||
| github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= | ||||
| github.com/nlpodyssey/gopickle v0.3.0 h1:BLUE5gxFLyyNOPzlXxt6GoHEMMxD0qhsE4p0CIQyoLw= | ||||
| github.com/nlpodyssey/gopickle v0.3.0/go.mod h1:f070HJ/yR+eLi5WmM1OXJEGaTpuJEUiib19olXgYha0= | ||||
| github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= | ||||
| github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= | ||||
| github.com/prometheus/client_golang v1.21.0 h1:DIsaGmiaBkSangBgMtWdNfxbMNdku5IK6iNhrEqWvdA= | ||||
| github.com/prometheus/client_golang v1.21.0/go.mod h1:U9NM32ykUErtVBxdvD3zfi+EuFkkaBvMb09mIfe0Zgg= | ||||
| github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= | ||||
| github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= | ||||
| github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= | ||||
| github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= | ||||
| github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= | ||||
| github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= | ||||
| github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= | ||||
| github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= | ||||
| golang.org/x/exp v0.0.0-20230725093048-515e97ebf090 h1:Di6/M8l0O2lCLc6VVRWhgCiApHV8MnQurBnFSHsQtNY= | ||||
| golang.org/x/exp v0.0.0-20230725093048-515e97ebf090/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= | ||||
| golang.org/x/exp v0.0.0-20250228200357-dead58393ab7 h1:aWwlzYV971S4BXRS9AmqwDLAD85ouC6X+pocatKY58c= | ||||
| golang.org/x/exp v0.0.0-20250228200357-dead58393ab7/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk= | ||||
| golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= | ||||
| golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc= | ||||
| golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= | ||||
| golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= | ||||
| golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= | ||||
| golang.org/x/text v0.22.0 h1:bofq7m3/HAFvbF51jz3Q9wLg3jkvSPuiZu/pD1XwgtM= | ||||
| golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY= | ||||
| google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= | ||||
| google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= | ||||
| google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= | ||||
| google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= | ||||
| 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 v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= | ||||
| github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= | ||||
| github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= | ||||
| github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= | ||||
| github.com/prometheus/common v0.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= | ||||
| github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= | ||||
| github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= | ||||
| github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= | ||||
| github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= | ||||
| github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= | ||||
| go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= | ||||
| go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= | ||||
| golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= | ||||
| golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= | ||||
| golang.org/x/text v0.25.0 h1:qVyWApTSYLk/drJRO5mDlNYskwQznZmkpV2c8q9zls4= | ||||
| golang.org/x/text v0.25.0/go.mod h1:WEdwpYrmk1qmdHvhkSTNPm3app7v4rsT8F2UD6+VHIA= | ||||
| google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= | ||||
| google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= | ||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||
|   | ||||
| @@ -16,14 +16,12 @@ import ( | ||||
| 
 | ||||
| var ( | ||||
| 	version = "dev" | ||||
| 	commit  = "none" | ||||
| 	date    = "unknown" | ||||
| 	builtBy = "unknown" | ||||
| ) | ||||
| 
 | ||||
| func printAppVersion() { | ||||
| 	fmt.Println(version) | ||||
| 	fmt.Printf("    build date:  %s\r\n    commit hash: %s\r\n    built by:    %s\r\n", date, commit, builtBy) | ||||
| 	fmt.Printf("Version:    %s\n", version) | ||||
| 	fmt.Printf("Build date: %s\n", date) | ||||
| } | ||||
| 
 | ||||
| func main() { | ||||
| @@ -1,20 +0,0 @@ | ||||
| image: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}} | ||||
| {{#if build.tags}} | ||||
| tags: | ||||
| {{#each build.tags}} | ||||
|   - {{this}} | ||||
| {{/each}} | ||||
|   - "latest" | ||||
| {{/if}} | ||||
| manifests: | ||||
|   - | ||||
|     image: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-amd64 | ||||
|     platform: | ||||
|       architecture: amd64 | ||||
|       os: linux | ||||
|   - | ||||
|     image: git.cryptic.systems/volker.raschek/prometheus-fail2ban-exporter:{{#if build.tag}}{{trimPrefix "v" build.tag}}{{else}}latest{{/if}}-arm64-v8 | ||||
|     platform: | ||||
|       architecture: arm64 | ||||
|       os: linux | ||||
|       variant: v8 | ||||
| @@ -1,79 +1,10 @@ | ||||
| { | ||||
|   "$schema": "https://docs.renovatebot.com/renovate-schema.json", | ||||
|   "labels": [ "renovate" ], | ||||
|   "packageRules": [ | ||||
|     { | ||||
|       "automerge": false, | ||||
|       "description": "Disable all package updates by default", | ||||
|       "enabled": false, | ||||
|       "matchPackagePatterns": [ | ||||
|         "*" | ||||
|       ], | ||||
|       "matchUpdateTypes": [ | ||||
|         "major", | ||||
|         "minor", | ||||
|         "patch", | ||||
|         "pin", | ||||
|         "digest" | ||||
|   "extends": [ | ||||
|     "local>volker.raschek/renovate-config:default#master", | ||||
|     "local>volker.raschek/renovate-config:container#master", | ||||
|     "local>volker.raschek/renovate-config:actions#master", | ||||
|     "local>volker.raschek/renovate-config:golang#master", | ||||
|     "local>volker.raschek/renovate-config:regexp#master" | ||||
|   ] | ||||
|     }, | ||||
|     { | ||||
|       "addLabels": [ "renovate/droneci", "renovate/automerge" ], | ||||
|       "automerge": true, | ||||
|       "description": "Automatically update minor and patch versions of used drone-ci images", | ||||
|       "enabled": true, | ||||
|       "matchManagers": "droneci", | ||||
|       "matchUpdateTypes": [ | ||||
|         "minor", | ||||
|         "patch" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "addLabels": [ | ||||
|         "renovate/automerge", | ||||
|         "renovate/github-action" | ||||
|       ], | ||||
|       "automerge": true, | ||||
|       "description": "Automatically update public github-actions dependencies", | ||||
|       "enabled": true, | ||||
|       "matchManagers": [ | ||||
|         "github-actions" | ||||
|       ], | ||||
|       "matchUpdateTypes": [ | ||||
|         "minor", | ||||
|         "patch" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "addLabels": [ | ||||
|         "renovate/automerge", | ||||
|         "renovate/golang" | ||||
|       ], | ||||
|       "automerge": true, | ||||
|       "description": "Automatically update public go dependencies", | ||||
|       "enabled": true, | ||||
|       "matchDatasources": [ | ||||
|         "go" | ||||
|       ], | ||||
|       "matchUpdateTypes": [ | ||||
|         "minor", | ||||
|         "patch" | ||||
|       ] | ||||
|     }, | ||||
|     { | ||||
|       "description": "Automatically update patch version of used container images in docker files", | ||||
|       "addLabels": [ "renovate/container-image", "renovate/automerge" ], | ||||
|       "automerge": true, | ||||
|       "matchManagers": [ "dockerfile" ], | ||||
|       "matchUpdateTypes": [ "patch" ] | ||||
|     } | ||||
|   ], | ||||
|   "platformAutomerge": true, | ||||
|   "postUpdateOptions": [ | ||||
|     "gomodTidy" | ||||
|   ], | ||||
|   "prConcurrentLimit": 0, | ||||
|   "prHourlyLimit": 0, | ||||
|   "rebaseLabel": "renovate/rebase", | ||||
|   "rebaseWhen": "behind-base-branch" | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user