mirror of
https://github.com/prymitive/karma
synced 2026-05-05 03:16:51 +00:00
Drop haml templates in favor of underscore. Haml templates are harder to maintain and require extra dependencies, we already have underscore.js included and it provides a fast templating engine. Rewrite all client side templates using it. Performance with underscore is pretty much the same as with haml (with 10k alerts).
182 lines
6.0 KiB
Makefile
182 lines
6.0 KiB
Makefile
NAME := unsee
|
|
VERSION := $(shell git describe --tags --always --dirty='-dev')
|
|
|
|
# Alertmanager instance used when running locally, points to mock data
|
|
ALERTMANAGER_URI := https://raw.githubusercontent.com/cloudflare/unsee/master/mock/0.5
|
|
# Listen port when running locally
|
|
PORT := 8080
|
|
|
|
SOURCES := $(wildcard *.go) $(wildcard */*.go)
|
|
ASSET_SOURCES := $(wildcard assets/*/* assets/*/*/*)
|
|
|
|
GO_BINDATA_MODE := prod
|
|
GIN_DEBUG := false
|
|
ifdef DEBUG
|
|
GO_BINDATA_FLAGS = -debug
|
|
GO_BINDATA_MODE = debug
|
|
GIN_DEBUG = true
|
|
DOCKER_ARGS = -v $(CURDIR)/assets:$(CURDIR)/assets:ro
|
|
endif
|
|
|
|
.DEFAULT_GOAL := $(NAME)
|
|
|
|
.build/deps.ok:
|
|
go get -u github.com/jteeuwen/go-bindata/...
|
|
go get -u github.com/elazarl/go-bindata-assetfs/...
|
|
go get -u github.com/golang/lint/golint
|
|
mkdir -p .build
|
|
touch $@
|
|
|
|
.build/bindata_assetfs.%:
|
|
mkdir -p .build
|
|
rm -f .build/bindata_assetfs.*
|
|
touch $@
|
|
|
|
bindata_assetfs.go: .build/deps.ok .build/bindata_assetfs.$(GO_BINDATA_MODE) $(ASSET_SOURCES)
|
|
go-bindata-assetfs $(GO_BINDATA_FLAGS) -prefix assets -nometadata assets/templates/... assets/static/...
|
|
|
|
$(NAME): .build/deps.ok bindata_assetfs.go $(SOURCES)
|
|
go build -ldflags "-X main.version=$(VERSION)"
|
|
|
|
.PHONY: clean
|
|
clean:
|
|
rm -fr .build $(NAME)
|
|
|
|
.PHONY: run
|
|
run: $(NAME)
|
|
ALERTMANAGER_URI=$(ALERTMANAGER_URI) \
|
|
COLOR_LABELS_UNIQUE="instance cluster" \
|
|
COLOR_LABELS_STATIC="job" \
|
|
DEBUG="$(GIN_DEBUG)" \
|
|
PORT=$(PORT) \
|
|
./$(NAME)
|
|
|
|
.PHONY: docker-image
|
|
docker-image: bindata_assetfs.go
|
|
docker build --build-arg VERSION=$(VERSION) -t $(NAME):$(VERSION) .
|
|
|
|
.PHONY: run-docker
|
|
run-docker: docker-image
|
|
@docker rm -f $(NAME) || true
|
|
docker run \
|
|
--name $(NAME) \
|
|
$(DOCKER_ARGS) \
|
|
-e ALERTMANAGER_URI=$(ALERTMANAGER_URI) \
|
|
-e COLOR_LABELS_UNIQUE="instance cluster" \
|
|
-e COLOR_LABELS_STATIC="job" \
|
|
-e DEBUG="$(GIN_DEBUG)" \
|
|
-e PORT=$(PORT) \
|
|
-p $(PORT):$(PORT) \
|
|
$(NAME):$(VERSION)
|
|
|
|
.PHONY: lint
|
|
lint: .build/deps.ok
|
|
@golint ./... | (egrep -v "^vendor/|^bindata_assetfs.go" || true)
|
|
|
|
.PHONY: test
|
|
test: lint bindata_assetfs.go
|
|
@go test -cover `go list ./... | grep -v /vendor/`
|
|
|
|
.build/vendor.ok:
|
|
go get -u github.com/kardianos/govendor
|
|
mkdir -p .build
|
|
touch $@
|
|
|
|
.PHONY: vendor
|
|
vendor: .build/vendor.ok
|
|
govendor remove +u
|
|
govendor fetch +m +e
|
|
|
|
.PHONY: vendor-update
|
|
vendor-update: .build/vendor.ok
|
|
govendor fetch +v
|
|
|
|
#======================== asset helper targets =================================
|
|
|
|
ASSETS_DIR := $(CURDIR)/assets/static/managed
|
|
CDNJS_PREFIX := https://cdnjs.cloudflare.com/ajax/libs
|
|
|
|
%.js:
|
|
$(eval VERSION := $(word 2, $(subst /, ,$@)))
|
|
$(eval DIRNAME := $(shell dirname $@))
|
|
$(eval BASENAME := $(shell basename $@))
|
|
$(eval MAPPATH := $(@:.js=.map))
|
|
$(eval MAPFILE := $(shell basename $(MAPPATH)))
|
|
$(eval OUTPUT := $(ASSETS_DIR)/js/$(VERSION)-$(BASENAME))
|
|
@echo Fetching js asset $@
|
|
@mkdir -p $(ASSETS_DIR)/js
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
@( \
|
|
export MAP=`grep sourceMappingURL $(OUTPUT) | cut -d = -f 2`; \
|
|
(test -n "$$MAP" && echo "+ Fetching js map $${MAP}" && (curl --fail -so $(ASSETS_DIR)/js/$${MAP} $(CDNJS_PREFIX)/$(DIRNAME)/$$MAP || rm -f $(ASSETS_DIR)/js/$${MAP})); \
|
|
(test -z "$$MAP" && echo "+ Fetching js map $(MAPPATH)" && (curl --fail -so $(ASSETS_DIR)/js/$(MAPFILE) $(CDNJS_PREFIX)/$(MAPPATH) || rm -f $(ASSETS_DIR)/js/$(MAPFILE)) || true); \
|
|
) || true
|
|
@echo $(VERSION)-$(shell basename $@) >> $(ASSETS_DIR)/js/assets.txt
|
|
|
|
%.css:
|
|
$(eval VERSION := $(word 2, $(subst /, ,$@)))
|
|
$(eval OUTPUT := $(ASSETS_DIR)/css/$(VERSION)-$(shell basename $@))
|
|
@echo Fetching css asset $@
|
|
@mkdir -p $(ASSETS_DIR)/css
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
@echo $(VERSION)-$(shell basename $@) >> $(ASSETS_DIR)/css/assets.txt
|
|
|
|
font-awesome/4.7.0/fonts/%:
|
|
$(eval OUTPUT := $(ASSETS_DIR)/fonts/$(shell basename $@))
|
|
@echo Fetching fonts asset $@
|
|
@mkdir -p $(ASSETS_DIR)/fonts
|
|
@curl --fail -so $(OUTPUT) $(CDNJS_PREFIX)/$@ || (rm -f $(OUTPUT) && exit 1)
|
|
|
|
.PHONY: clean-assets
|
|
clean-assets:
|
|
@git rm -f $(ASSETS_DIR)/*/* >/dev/null 2>&1 || true
|
|
|
|
.PHONY: assets
|
|
assets: clean-assets
|
|
# jquery, for everything
|
|
assets: jquery/2.2.4/jquery.min.js
|
|
# moment, for timestamp parsing and printing
|
|
assets: moment.js/2.17.1/moment.min.js
|
|
# favico, for adding alert counter to the favico
|
|
assets: favico.js/0.3.10/favico.min.js
|
|
# fontawesome, for ui icons
|
|
assets: font-awesome/4.7.0/css/font-awesome.min.css
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.eot
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.svg
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.ttf
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.woff
|
|
assets: font-awesome/4.7.0/fonts/fontawesome-webfont.woff2
|
|
assets: font-awesome/4.7.0/fonts/FontAwesome.otf
|
|
# bootstrap & bootstrap switch, for ui
|
|
assets: twitter-bootstrap/3.3.7/js/bootstrap.min.js
|
|
assets: bootswatch/3.3.7/flatly/bootstrap.min.css
|
|
assets: bootstrap-switch/3.3.2/js/bootstrap-switch.min.js
|
|
assets: bootstrap-switch/3.3.2/css/bootstrap3/bootstrap-switch.min.css
|
|
# nprogress, for refresh progress bar
|
|
assets: nprogress/0.2.0/nprogress.min.js
|
|
assets: nprogress/0.2.0/nprogress.min.css
|
|
# tagsinput & typeahead, for filter bar and autocomplete
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.min.js
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput.css
|
|
assets: typeahead.js/0.11.1/typeahead.bundle.min.js
|
|
assets: bootstrap-tagsinput/0.8.0/bootstrap-tagsinput-typeahead.css
|
|
# loaders.css, for animated spinners
|
|
assets: loaders.css/0.1.2/loaders.css.min.js
|
|
assets: loaders.css/0.1.2/loaders.min.css
|
|
# js-cookie, for preference state loading via cookies
|
|
assets: js-cookie/2.1.3/js.cookie.min.js
|
|
# underscore & haml, for template rendering in js
|
|
assets: underscore.js/1.8.3/underscore-min.js
|
|
# masonry, for grid layout
|
|
assets: masonry/4.1.1/masonry.pkgd.min.js
|
|
# copy to clipboard
|
|
assets: clipboard.js/1.5.16/clipboard.min.js
|
|
# sentry client
|
|
assets: raven.js/3.9.1/raven.min.js
|
|
# sha1 function used to generate id from string
|
|
assets: js-sha1/0.4.0/sha1.min.js
|
|
# allows selecting only visible elements
|
|
assets: is-in-viewport/2.4.2/isInViewport.min.js
|
|
assets:
|
|
@git add $(ASSETS_DIR)/*/*
|