diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a1770f6..49cb5c2 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,8 @@ env: REGISTRY: ghcr.io # github.repository as / IMAGE_NAME: ${{ github.repository }} - REGISTRY_IMAGE: "ghcr.io/cottand/grimd" + REGISTRY_IMAGE: "ghcr.io/cottand/leng" + jobs: docker: diff --git a/.gitignore b/.gitignore index 8694f09..5ff746b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,13 @@ .vscode *.test pprof/ -grimd.exe +leng.exe *.swp .idea sources -grimd -grimd.log -grimd.toml +leng +leng.log +leng.toml .DS_Store result \ No newline at end of file diff --git a/README.md b/README.md index 3d3a49f..7c25926 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# grimd +# leng -[![Go Report Card](https://goreportcard.com/badge/github.com/cottand/grimd?style=flat-square)](https://goreportcard.com/report/github.com/cottand/grimd) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/cottand/grimd) -[![Release](https://github.com/cottand/grimd/actions/workflows/release.yaml/badge.svg)](https://github.com/cottand/grimd/releases) +[![Go Report Card](https://goreportcard.com/badge/github.com/cottand/leng?style=flat-square)](https://goreportcard.com/report/github.com/cottand/leng) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg?style=flat-square)](http://godoc.org/github.com/cottand/leng) +[![Build](https://github.com/Cottand/leng/actions/workflows/build.yml/badge.svg?branch=master)](https://github.com/Cottand/leng/actions/workflows/build.yml) -:zap: Fast dns proxy, built to black-hole internet advertisements and malware servers. Capable of custom DNS. +:zap: fast dns server, built to block advertisements and malware servers -Forked from [looterz/grimd](https://github.com/looterz/grimd) +Forked from [looterz/grimd](https://github.com/looterz/leng) # Features @@ -18,40 +18,40 @@ Forked from [looterz/grimd](https://github.com/looterz/grimd) - [x] Blocklist fetching - [x] Hardcoded blocklist config - [x] Hardcoded whitelist config -- [x] Fast startup _(so it can be used with templating for service discovery)_ +- [x] Fast startup and tiny image _(so it can be quickly redeployed for use with templating for service discovery)_ - [x] Small memory footprint (~50MBs with metrics and DoH enabled) # Installation ``` -go install github.com/cottand/grimd@latest +go install github.com/cottand/leng@latest ``` You can also -- download one of the binary [releases](https://github.com/cottand/grimd/releases) -- use the [Docker image](https://github.com/cottand/grimd/pkgs/container/grimd) - - `docker run -d -p 53:53/udp -p 53:53/tcp -p 8080:8080/tcp ghcr.io/cottand/grimd` -- use [Docker compose YML](https://raw.githubusercontent.com/cottand/grimd/master/docker-compose.yml) -- use the [Nix flake](https://github.com/Cottand/grimd/tree/master/flake.nix) - - `nix run github:cottand/grimd` +- download one of the binary [releases](https://github.com/cottand/leng/releases) +- use the [Docker image](https://github.com/cottand/leng/pkgs/container/leng) + - `docker run -d -p 53:53/udp -p 53:53/tcp -p 8080:8080/tcp ghcr.io/cottand/leng` +- use [Docker compose YML](https://raw.githubusercontent.com/cottand/leng/master/docker-compose.yml) +- use the [Nix flake](https://github.com/Cottand/leng/tree/master/flake.nix) + - `nix run github:cottand/leng` -Detailed guides and resources can be found on the [wiki](https://github.com/cottand/grimd/wiki). +Detailed guides and resources can be found on the [wiki](https://github.com/cottand/leng/wiki). # Configuration -By default, grimd binds DNS to `0.0.0.0:53` and loads a few known blocklists. The default settings should be enough for +By default, leng binds DNS to `0.0.0.0:53` and loads a few known blocklists. The default settings should be enough for most. -See [the wiki](https://github.com/Cottand/grimd/wiki/Configuration) for the full config, including defaults and dynamic +See [the wiki](https://github.com/Cottand/leng/wiki/Configuration) for the full config, including defaults and dynamic config reloading. ### CLI Flags ```bash -$ grimd -help +$ leng -help -Usage of grimd: +Usage of leng: -config string - location of the config file (default "grimd.toml") + location of the config file (default "leng.toml") -update force an update of the blocklist database @@ -59,10 +59,10 @@ Usage of grimd: # Building -Requires golang 1.21 or higher, you build grimd like any other golang application, for example to build for linux x64 +Requires golang 1.21 or higher, you build leng like any other golang application, for example to build for linux x64 ```shell -env GOOS=linux GOARCH=amd64 go build -v github.com/cottand/grimd +env GOOS=linux GOARCH=amd64 go build -v github.com/cottand/leng ``` # Building Docker @@ -71,8 +71,8 @@ Run container and test ```shell mkdir sources -docker build -t grimd:latest -f docker/alpine.Dockerfile . && \ -docker run -v $PWD/sources:/sources --rm -it -P --name grimd-test grimd:latest --config /sources/grimd.toml --update +docker build -t leng:latest -f docker/alpine.Dockerfile . && \ +docker run -v $PWD/sources:/sources --rm -it -P --name leng-test leng:latest --config /sources/leng.toml --update ``` By default, if the program runs in a docker, it will automatically replace `127.0.0.1` in the default configuration @@ -82,16 +82,10 @@ with `0.0.0.0` to ensure that the API interface is available. curl -H "Accept: application/json" http://127.0.0.1:55006/application/active ``` -# Speed - -Incoming requests spawn a goroutine and are served concurrently, and the block cache resides in-memory to allow for -rapid lookups, while answered queries are cached allowing grimd to serve thousands of queries at once while maintaining -a memory footprint of under 30mb for 100,000 blocked domains! - # Daemonize -You can find examples of different daemon scripts for grimd on -the [wiki](https://github.com/looterz/grimd/wiki/Daemon-Scripts). +You can find examples of different daemon scripts for leng on +the [wiki](https://github.com/looterz/leng/wiki/Daemon-Scripts). # Objectives @@ -108,7 +102,7 @@ the [wiki](https://github.com/looterz/grimd/wiki/Daemon-Scripts). ## Non-objectives -**Not keeping it simple**: I would like grimd to become +**Not keeping it simple**: I would like leng to become a reliable custom DNS provider (like CoreDNS) and a reliable adblocker (like Blocky) that has the perfect set of features for self-hosters, and potentially for more critical setups. diff --git a/activation.go b/activation.go index 6fd515b..5539bb8 100644 --- a/activation.go +++ b/activation.go @@ -40,35 +40,35 @@ forever: case <-quit: break forever case <-a.queryChannel: - a.queryChannel <- grimdActive + a.queryChannel <- lengActive case v := <-a.toggleChannel: // Firefox is sending 2 queries in a row, so debouncing is needed. if v.Mode == 1 && nextToggleTime.After(time.Now()) { logger.Warning("Toggle is too close: wait 10 seconds\n") } else { if v.Mode == 1 { - grimdActive = !grimdActive + lengActive = !lengActive } else { - grimdActive = false + lengActive = false } nextToggleTime = time.Now().Add(time.Duration(10) * time.Second) - if !grimdActive && reactivationDelay > 0 { + if !lengActive && reactivationDelay > 0 { reactivate = time.Now().Add(time.Duration(v.Data) * time.Second) reactivatePending = true } else { reactivatePending = false } - a.queryChannel <- grimdActive + a.queryChannel <- lengActive } case v := <-a.setChannel: - grimdActive = v + lengActive = v reactivatePending = false - a.setChannel <- grimdActive + a.setChannel <- lengActive case <-ticker: now := time.Now() if reactivatePending && now.After(reactivate) { - logger.Notice("Reactivating grimd (timer)") - grimdActive = true + logger.Notice("Reactivating leng (timer)") + lengActive = true reactivatePending = false } } diff --git a/api.go b/api.go index a1dfafe..5343f68 100644 --- a/api.go +++ b/api.go @@ -218,7 +218,7 @@ func StartAPIServer(config *Config, }) router.GET("/application/active", func(c *gin.Context) { - c.IndentedJSON(http.StatusOK, gin.H{"active": grimdActive}) + c.IndentedJSON(http.StatusOK, gin.H{"active": lengActive}) }) // Handle the setting of active state. @@ -234,20 +234,20 @@ func StartAPIServer(config *Config, } else { switch active { case "On": - grimdActivation.set(true) - c.IndentedJSON(http.StatusOK, gin.H{"active": grimdActive}) + lengActivation.set(true) + c.IndentedJSON(http.StatusOK, gin.H{"active": lengActive}) case "Off": - grimdActivation.set(false) - c.IndentedJSON(http.StatusOK, gin.H{"active": grimdActive}) + lengActivation.set(false) + c.IndentedJSON(http.StatusOK, gin.H{"active": lengActive}) case "Snooze": timeoutString := c.DefaultQuery("timeout", "300") timeout, err := strconv.ParseUint(timeoutString, 0, 0) if err != nil { c.JSON(http.StatusBadRequest, gin.H{"error": "Illegal value for 'timeout'"}) } else { - grimdActivation.toggleOff(uint(timeout)) + lengActivation.toggleOff(uint(timeout)) c.IndentedJSON(http.StatusOK, gin.H{ - "active": grimdActive, + "active": lengActive, "timeout": timeout, }) } diff --git a/config.go b/config.go index 9fb4533..47af460 100644 --- a/config.go +++ b/config.go @@ -4,7 +4,7 @@ import ( cTls "crypto/tls" "errors" "fmt" - "github.com/cottand/grimd/tls" + "github.com/cottand/leng/tls" "github.com/jonboulle/clockwork" "github.com/pelletier/go-toml/v2" "log" @@ -13,10 +13,10 @@ import ( "strings" ) -// BuildVersion returns the build version of grimd, this should be incremented every new release +// BuildVersion returns the build version of leng, this should be incremented every new release var BuildVersion = "1.3.0" -// ConfigVersion returns the version of grimd, this should be incremented every time the config changes so grimd presents a warning +// ConfigVersion returns the version of leng, this should be incremented every time the config changes so leng presents a warning var ConfigVersion = "1.3.0" // Config holds the configuration parameters @@ -99,7 +99,7 @@ sourcedirs = [ # stderr>@ # syslog@ # loglevel: 0 = errors and important operations, 1 = dns queries, 2 = debug -# e.g. logconfig = "file:grimd.log@2,syslog@1,stderr@2" +# e.g. logconfig = "file:leng.log@2,syslog@1,stderr@2" logconfig = "stderr@2" # apidebug enables the debug mode of the http api library @@ -153,10 +153,10 @@ customdnsrecords = [ # "example.other.tld IN CNAME wikipedia.org" ] -# When this string is queried, toggle grimd on and off +# When this string is queried, toggle leng on and off togglename = "" -# If not zero, the delay in seconds before grimd automaticall reactivates after +# If not zero, the delay in seconds before leng automaticall reactivates after # having been turned off. reactivationdelay = 300 @@ -166,7 +166,7 @@ DoH = "https://cloudflare-dns.com/dns-query" # How deep to follow chains of CNAME records # set to 0 to disable CNAME-following entirely # (anything more than 10 should be more than plenty) -# see https://github.com/Cottand/grimd/wiki/CNAME%E2%80%90following-DNS +# see https://github.com/Cottand/leng/wiki/CNAME%E2%80%90following-DNS followCnameDepth = 12 # Prometheus metrics - disabled by default @@ -254,9 +254,9 @@ func LoadConfig(path string) (*Config, error) { config.Version = "none" } - log.Printf("warning, grimd.toml is out of date!\nconfig v%s\ngrimd config v%s\ngrimd v%s\nplease update your config\n", config.Version, ConfigVersion, BuildVersion) + log.Printf("warning, leng.toml is out of date!\nconfig v%s\nleng config v%s\nleng v%s\nplease update your config\n", config.Version, ConfigVersion, BuildVersion) } else { - log.Printf("grimd v%s\n", BuildVersion) + log.Printf("leng v%s\n", BuildVersion) } return &config, nil diff --git a/docker-compose.yml b/docker-compose.yml index 6b10481..7b50ff4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: - grimd: - image: ghcr.io/cottand/grimd:latest + leng: + image: ghcr.io/cottand/leng:latest ports: - "53:53/udp" - "53:53/tcp" diff --git a/doh.go b/doh.go index 0980294..978bd55 100644 --- a/doh.go +++ b/doh.go @@ -5,7 +5,7 @@ import ( "crypto/tls" "encoding/base64" "fmt" - "github.com/cottand/grimd/internal/metric" + "github.com/cottand/leng/internal/metric" "github.com/miekg/dns" "github.com/prometheus/client_golang/prometheus" "io" diff --git a/flake.nix b/flake.nix index f1e01f7..ec1840d 100644 --- a/flake.nix +++ b/flake.nix @@ -1,5 +1,5 @@ { - description = "Grimd, a fast dns proxy, built to black-hole internet advertisements and malware servers"; + description = "Leng, a fast dns proxy, built to black-hole internet advertisements and malware servers"; inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable"; @@ -12,34 +12,34 @@ # Build & packaging ## use with `nix build` packages = rec { - grimd = pkgs.buildGo121Module { + leng = pkgs.buildGo121Module { inherit system; vendorSha256 = "sha256-5dIZzqaw88lKuh1JHJurRZCPgrNzDHK/53bXKNGQBvQ="; - pname = "grimd"; + pname = "leng"; version = "0.0.1-test"; src = ./.; }; - default = grimd; + default = leng; }; # Dev environment ## use with `nix develop` devShells = rec { - grimd = pkgs.mkShell { + leng = pkgs.mkShell { packages = [ pkgs.fish pkgs.go_1_21 ]; # Note that `shellHook` still uses bash syntax. This starts fish, then exists the bash shell when fish exits. shellHook = "fish && exit"; }; - default = grimd; + default = leng; }; # App ## use with `nix run` apps = rec { - grimd = flake-utils.lib.mkApp { drv = self.packages.${system}.grimd; }; - default = grimd; + leng = flake-utils.lib.mkApp { drv = self.packages.${system}.leng; }; + default = leng; }; })); diff --git a/go.mod b/go.mod index b69e428..8a23336 100644 --- a/go.mod +++ b/go.mod @@ -1,4 +1,4 @@ -module github.com/cottand/grimd +module github.com/cottand/leng require ( github.com/gin-gonic/gin v1.9.1 diff --git a/grimd_test.go b/grimd_test.go index bfcd33a..faedf48 100644 --- a/grimd_test.go +++ b/grimd_test.go @@ -40,8 +40,8 @@ func integrationTest(changeConfig func(c *Config), test func(client *dns.Client, actChannel := make(chan *ActivationHandler) go startActivation(actChannel, quitActivation, config.ReactivationDelay) - grimdActivation = <-actChannel - grimdActive = true + lengActivation = <-actChannel + lengActive = true close(actChannel) server := &Server{ @@ -290,7 +290,7 @@ func TestConfigReloadForCustomRecords(t *testing.T) { actChannel := make(chan *ActivationHandler) go startActivation(actChannel, quitActivation, config.ReactivationDelay) - grimdActivation = <-actChannel + lengActivation = <-actChannel close(actChannel) server := &Server{ diff --git a/handler.go b/handler.go index cbf1415..0b2ba8a 100644 --- a/handler.go +++ b/handler.go @@ -1,7 +1,7 @@ package main import ( - "github.com/cottand/grimd/internal/metric" + "github.com/cottand/leng/internal/metric" "net" "slices" "strings" @@ -124,15 +124,15 @@ func (h *EventLoop) responseFor(Net string, req *dns.Msg, _local net.Addr, _remo q := req.Question[0] Q := Question{UnFqdn(q.Name), dns.TypeToString[q.Qtype], dns.ClassToString[q.Qclass]} logger.Infof("%s lookup %s\n", remote, Q.String()) - var grimdActive = grimdActivation.query() + var lengActive = lengActivation.query() if len(h.config.ToggleName) > 0 && strings.Contains(Q.Qname, h.config.ToggleName) { logger.Noticef("Found ToggleName! (%s)\n", Q.Qname) - grimdActive = grimdActivation.toggle(h.config.ReactivationDelay) + lengActive = lengActivation.toggle(h.config.ReactivationDelay) - if grimdActive { - logger.Notice("Grimd Activated") + if lengActive { + logger.Notice("Leng Activated") } else { - logger.Notice("Grimd Deactivated") + logger.Notice("Leng Deactivated") } } @@ -150,7 +150,7 @@ func (h *EventLoop) responseFor(Net string, req *dns.Msg, _local net.Addr, _remo return nil, false } } else { - if blocked && !grimdActive { + if blocked && !lengActive { logger.Debugf("%s hit cache and was blocked: forwarding request\n", Q.String()) } else { logger.Debugf("%s hit cache\n", Q.String()) @@ -170,7 +170,7 @@ func (h *EventLoop) responseFor(Net string, req *dns.Msg, _local net.Addr, _remo if IPQuery > 0 { blacklisted = h.blockCache.Exists(Q.Qname) - if grimdActive && blacklisted { + if lengActive && blacklisted { m := new(dns.Msg) m.SetReply(req) @@ -267,8 +267,8 @@ func (h *EventLoop) responseFor(Net string, req *dns.Msg, _local net.Addr, _remo defer metric.ReportDNSRespond(remote, mesg, false) if IPQuery > 0 && len(mesg.Answer) > 0 { - if !grimdActive && blacklisted { - logger.Debugf("%s is blacklisted and grimd not active: not caching\n", Q.String()) + if !lengActive && blacklisted { + logger.Debugf("%s is blacklisted and leng not active: not caching\n", Q.String()) } else { err = h.cache.Set(key, mesg, false) if err != nil { diff --git a/internal/metric/metric.go b/internal/metric/metric.go index a85a25c..30493eb 100644 --- a/internal/metric/metric.go +++ b/internal/metric/metric.go @@ -9,7 +9,7 @@ import ( ) const ( - Namespace = "grimd" + Namespace = "leng" ) var ( diff --git a/logger.go b/logger.go index f407711..39d08dc 100644 --- a/logger.go +++ b/logger.go @@ -11,7 +11,7 @@ import ( "github.com/op/go-logging" ) -const grimdModuleName = "grimd" +const lengModuleName = "leng" type fileConfig struct { name string @@ -135,7 +135,7 @@ func createFileLogger(cfg fileConfig, moduleName string) (*logging.LeveledBacken } func createSyslogBackend(cfg boolConfig, moduleName string) (*logging.LeveledBackend, error) { - backend, err := logging.NewSyslogBackend("Grimd") + backend, err := logging.NewSyslogBackend("Leng") if err != nil { return nil, err } @@ -175,9 +175,9 @@ func loggerInit(cfg string) (loggingState, error) { } state.config = logConfig - logger = logging.MustGetLogger(grimdModuleName) + logger = logging.MustGetLogger(lengModuleName) - backends, openFiles, err := createFileLoggers(logConfig.files, grimdModuleName) + backends, openFiles, err := createFileLoggers(logConfig.files, lengModuleName) if err != nil { return loggingState{}, err } @@ -187,12 +187,12 @@ func loggerInit(cfg string) (loggingState, error) { if logConfig.stderr.enabled { var format = `%{color}%{time:15:04:05.000} %{level:.4s} %{shortfile} ▶ %{id:03x}%{color:reset} %{message}` - stderrLogger := createLoggerFromFile(os.Stderr, logConfig.stderr.level, format, grimdModuleName) + stderrLogger := createLoggerFromFile(os.Stderr, logConfig.stderr.level, format, lengModuleName) state.stdBackends = append(state.stdBackends, stderrLogger) } if logConfig.syslog.enabled { - syslogLogger, err := createSyslogBackend(logConfig.syslog, grimdModuleName) + syslogLogger, err := createSyslogBackend(logConfig.syslog, lengModuleName) if err != nil { panic(err) } @@ -215,7 +215,7 @@ func (s loggingState) cleanUp() { } func (s loggingState) reopen() error { - b, f, err := createFileLoggers(s.config.files, grimdModuleName) + b, f, err := createFileLoggers(s.config.files, lengModuleName) if err != nil { logger.Errorf("Failed to reinit logging: %s", err) return err diff --git a/logger_test.go b/logger_test.go index 419cf8c..84ca62a 100644 --- a/logger_test.go +++ b/logger_test.go @@ -20,11 +20,11 @@ func TestLogConfigParsing(t *testing.T) { err error }{ { - in: "file:grimd.log@0", + in: "file:leng.log@0", out: &logConfig{ files: []fileConfig{ { - name: "grimd.log", + name: "leng.log", level: logging.WARNING, }, }, @@ -32,11 +32,11 @@ func TestLogConfigParsing(t *testing.T) { err: nil, }, { - in: "file:grimd.log@0,file:something.log@1", + in: "file:leng.log@0,file:something.log@1", out: &logConfig{ files: []fileConfig{ { - name: "grimd.log", + name: "leng.log", level: logging.WARNING, }, { @@ -48,9 +48,9 @@ func TestLogConfigParsing(t *testing.T) { err: nil, }, { - in: "file:grimd.log@aa", + in: "file:leng.log@aa", out: nil, - err: fmt.Errorf("error while parsing 'file:grimd.log@aa': 'aa' is not an integer"), + err: fmt.Errorf("error while parsing 'file:leng.log@aa': 'aa' is not an integer"), }, { in: "syslog@aa", @@ -58,9 +58,9 @@ func TestLogConfigParsing(t *testing.T) { err: fmt.Errorf("error while parsing 'syslog@aa': 'aa' is not an integer"), }, { - in: "fail:grimd.log@1", + in: "fail:leng.log@1", out: nil, - err: fmt.Errorf("error: uknown log config fragment: 'fail:grimd.log@1'"), + err: fmt.Errorf("error: uknown log config fragment: 'fail:leng.log@1'"), }, { in: "syslog@0", @@ -73,11 +73,11 @@ func TestLogConfigParsing(t *testing.T) { err: nil, }, { - in: "file:grimd.log@1,syslog@1", + in: "file:leng.log@1,syslog@1", out: &logConfig{ files: []fileConfig{ { - name: "grimd.log", + name: "leng.log", level: logging.INFO, }, }, @@ -99,11 +99,11 @@ func TestLogConfigParsing(t *testing.T) { err: nil, }, { - in: "file:grimd.log@2,syslog@1,stderr@0", + in: "file:leng.log@2,syslog@1,stderr@0", out: &logConfig{ files: []fileConfig{ { - name: "grimd.log", + name: "leng.log", level: logging.DEBUG, }, }, diff --git a/main.go b/main.go index 3087a1e..2080108 100644 --- a/main.go +++ b/main.go @@ -12,10 +12,10 @@ import ( ) var ( - configPath string - forceUpdate bool - grimdActive bool - grimdActivation *ActivationHandler + configPath string + forceUpdate bool + lengActive bool + lengActivation *ActivationHandler ) func reloadBlockCache(config *Config, @@ -59,12 +59,12 @@ func main() { loggingState.cleanUp() }() - grimdActive = true + lengActive = true quitActivation := make(chan bool) actChannel := make(chan *ActivationHandler) go startActivation(actChannel, quitActivation, config.ReactivationDelay) - grimdActivation = <-actChannel + lengActivation = <-actChannel close(actChannel) server := &Server{ @@ -80,7 +80,7 @@ func main() { reloadChan := make(chan bool) - // The server will start with an empty blockcache soe we can dowload the lists if grimd is the + // The server will start with an empty blockcache soe we can dowload the lists if leng is the // system's dns server. server.Run(config, blockCache, questionCache) @@ -127,7 +127,7 @@ forever: } func init() { - flag.StringVar(&configPath, "config", "grimd.toml", "location of the config file") + flag.StringVar(&configPath, "config", "leng.toml", "location of the config file") flag.BoolVar(&forceUpdate, "update", false, "force an update of the blocklist database") runtime.GOMAXPROCS(runtime.NumCPU()) diff --git a/records.go b/records.go index f52918d..9d0ca45 100644 --- a/records.go +++ b/records.go @@ -1,7 +1,7 @@ package main import ( - "github.com/cottand/grimd/internal/metric" + "github.com/cottand/leng/internal/metric" "github.com/miekg/dns" "net" ) diff --git a/resolver.go b/resolver.go index 1022883..6e8cbf1 100644 --- a/resolver.go +++ b/resolver.go @@ -3,7 +3,7 @@ package main import ( "bytes" "fmt" - "github.com/cottand/grimd/internal/metric" + "github.com/cottand/leng/internal/metric" "github.com/prometheus/client_golang/prometheus" "io" "net/http" diff --git a/server.go b/server.go index 3485d43..08bb816 100644 --- a/server.go +++ b/server.go @@ -1,7 +1,7 @@ package main import ( - "github.com/cottand/grimd/internal/metric" + "github.com/cottand/leng/internal/metric" "time" "github.com/miekg/dns"