Compare commits
	
		
			18 commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| fba5551bb3 | |||
| 85671a076c | |||
| da35bf4bcf | |||
| 345ef9471d | |||
| 5f6ce7ca21 | |||
| 514ffee613 | |||
| ece9256745 | |||
| e9c1bf7070 | |||
| 306b2c597d | |||
| ab0dea2805 | |||
| 7312714ccb | |||
| 9980ae8cc7 | |||
| 02a7babb36 | |||
| 80e07dbd14 | |||
| 9ca2b9156d | |||
| b456bcbfcc | |||
| bddf8e1458 | |||
| 396f19f691 | 
					 10 changed files with 62 additions and 23 deletions
				
			
		
							
								
								
									
										12
									
								
								CHANGELOG.md
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								CHANGELOG.md
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -1,5 +1,17 @@
 | 
			
		|||
# Changelog
 | 
			
		||||
 | 
			
		||||
## [0.0.6] - 2024-10-07
 | 
			
		||||
 | 
			
		||||
- Update external dependency: go-dateparser
 | 
			
		||||
 | 
			
		||||
## [0.0.5] - 2024-10-07
 | 
			
		||||
 | 
			
		||||
- Small change: adds --output_json to drop command.
 | 
			
		||||
 | 
			
		||||
## [0.0.4] - 2024-05-08
 | 
			
		||||
 | 
			
		||||
- ✨ Add -p flag to config to print config path
 | 
			
		||||
 | 
			
		||||
## [0.0.3] - 2024-03-11
 | 
			
		||||
 | 
			
		||||
- ✨ Add JSON formatter
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										13
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										13
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -3,6 +3,12 @@ OUT=my-log
 | 
			
		|||
GOBIN=$(shell go env GOBIN)
 | 
			
		||||
COVEROUT=cover.out
 | 
			
		||||
COVERHTML=cover.html
 | 
			
		||||
OPEN=xdg-open
 | 
			
		||||
OS=$(shell uname -s)
 | 
			
		||||
 | 
			
		||||
ifeq ($(OS),Darwin)
 | 
			
		||||
OPEN=open
 | 
			
		||||
endif
 | 
			
		||||
 | 
			
		||||
.PHONY: help
 | 
			
		||||
help: ## Show help for documented recipes
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +29,8 @@ test: ## Test application and generate coverage report
 | 
			
		|||
	$(MAKE) clean
 | 
			
		||||
	$(MAKE) $(COVEROUT)
 | 
			
		||||
 | 
			
		||||
$(COVEROUT): $(SOURCES) fmt
 | 
			
		||||
$(COVEROUT): $(SOURCES)
 | 
			
		||||
	$(MAKE) fmt
 | 
			
		||||
	go test ./... -race -cover -coverprofile $@
 | 
			
		||||
 | 
			
		||||
$(COVERHTML): $(COVEROUT)
 | 
			
		||||
| 
						 | 
				
			
			@ -33,8 +40,8 @@ $(COVERHTML): $(COVEROUT)
 | 
			
		|||
report: $(COVERHTML) ## Generate a coverage report
 | 
			
		||||
 | 
			
		||||
.PHONY: open-report
 | 
			
		||||
open-report: report ## Open the coverage report in the default browser
 | 
			
		||||
	xdg-open $(COVERHTML)
 | 
			
		||||
open-report: $(COVERHTML) ## Open the coverage report in the default browser
 | 
			
		||||
	$(OPEN) $<
 | 
			
		||||
 | 
			
		||||
.PHONY: build
 | 
			
		||||
build: $(OUT) ## Builds the application
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,11 @@ var configCmd = &cobra.Command{
 | 
			
		|||
	//Long: ``,
 | 
			
		||||
	SilenceUsage: true,
 | 
			
		||||
	RunE: func(cmd *cobra.Command, args []string) (err error) {
 | 
			
		||||
		print, _ := cmd.Flags().GetBool("print")
 | 
			
		||||
		if print {
 | 
			
		||||
			fmt.Fprintln(cmd.OutOrStdout(), config.ConfigPath)
 | 
			
		||||
			return nil
 | 
			
		||||
		}
 | 
			
		||||
		force, _ := cmd.Flags().GetBool("force")
 | 
			
		||||
		if !force {
 | 
			
		||||
			_, err = os.Stat(config.ConfigPath)
 | 
			
		||||
| 
						 | 
				
			
			@ -60,4 +65,5 @@ func init() {
 | 
			
		|||
	rootCmd.AddCommand(configCmd)
 | 
			
		||||
 | 
			
		||||
	configCmd.Flags().BoolP("force", "f", false, "Force overwrite")
 | 
			
		||||
	configCmd.Flags().BoolP("print", "p", false, "Print path only")
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,6 +21,7 @@ import (
 | 
			
		|||
	"fmt"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	"codeberg.org/danjones000/my-log/config"
 | 
			
		||||
	"codeberg.org/danjones000/my-log/files"
 | 
			
		||||
	"codeberg.org/danjones000/my-log/formatters"
 | 
			
		||||
	"codeberg.org/danjones000/my-log/models"
 | 
			
		||||
| 
						 | 
				
			
			@ -31,6 +32,7 @@ import (
 | 
			
		|||
var d Date
 | 
			
		||||
var fields map[string]string
 | 
			
		||||
var j Json
 | 
			
		||||
var outJson bool
 | 
			
		||||
 | 
			
		||||
// dropCmd represents the drop command
 | 
			
		||||
var dropCmd = &cobra.Command{
 | 
			
		||||
| 
						 | 
				
			
			@ -40,6 +42,10 @@ var dropCmd = &cobra.Command{
 | 
			
		|||
	Args:         cobra.ExactArgs(2),
 | 
			
		||||
	SilenceUsage: true,
 | 
			
		||||
	RunE: func(cmd *cobra.Command, args []string) error {
 | 
			
		||||
		if outJson {
 | 
			
		||||
			config.Overrides["output.stdout.config.format"] = "json"
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		log := args[0]
 | 
			
		||||
		title := args[1]
 | 
			
		||||
		ms := &models.Metas{}
 | 
			
		||||
| 
						 | 
				
			
			@ -83,6 +89,7 @@ func init() {
 | 
			
		|||
	dropCmd.Flags().VarP(&d, "date", "d", "Date for log entry")
 | 
			
		||||
	dropCmd.Flags().StringToStringVarP(&fields, "fields", "f", nil, "Fields you add to entry")
 | 
			
		||||
	dropCmd.Flags().VarP(&j, "json", "j", "Entire entry as json")
 | 
			
		||||
	dropCmd.Flags().BoolVarP(&outJson, "output_json", "o", false, "Output result as JSON")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type Json struct {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -211,7 +211,7 @@ func (s *AppendTestSuite) TestConfLoadErr() {
 | 
			
		|||
 | 
			
		||||
func (s *AppendTestSuite) TestMkdirErr() {
 | 
			
		||||
	// Don't run this test as root
 | 
			
		||||
	config.Overrides["input.path"] = "/root/my-logs-test"
 | 
			
		||||
	config.Overrides["input.path"] = "/var/my-logs-test"
 | 
			
		||||
	defer func(path string) {
 | 
			
		||||
		config.Overrides["input.path"] = path
 | 
			
		||||
	}(s.dir)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										8
									
								
								go.mod
									
										
									
									
									
								
							
							
						
						
									
										8
									
								
								go.mod
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -5,10 +5,10 @@ go 1.21.5
 | 
			
		|||
require (
 | 
			
		||||
	github.com/BurntSushi/toml v1.3.2
 | 
			
		||||
	github.com/caarlos0/env/v10 v10.0.0
 | 
			
		||||
	github.com/markusmobius/go-dateparser v1.2.1
 | 
			
		||||
	github.com/markusmobius/go-dateparser v1.2.3
 | 
			
		||||
	github.com/mitchellh/mapstructure v1.5.0
 | 
			
		||||
	github.com/spf13/cobra v1.8.0
 | 
			
		||||
	github.com/stretchr/testify v1.8.4
 | 
			
		||||
	github.com/stretchr/testify v1.9.0
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
require (
 | 
			
		||||
| 
						 | 
				
			
			@ -25,9 +25,7 @@ require (
 | 
			
		|||
	github.com/tetratelabs/wazero v1.2.1 // indirect
 | 
			
		||||
	github.com/wasilibs/go-re2 v1.3.0 // indirect
 | 
			
		||||
	golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705 // indirect
 | 
			
		||||
	golang.org/x/text v0.10.0 // indirect
 | 
			
		||||
	golang.org/x/text v0.14.0 // indirect
 | 
			
		||||
	gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect
 | 
			
		||||
	gopkg.in/yaml.v3 v3.0.1 // indirect
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
replace github.com/markusmobius/go-dateparser => github.com/goodevilgenius/go-dateparser v1.2.2
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										12
									
								
								go.sum
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								go.sum
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -8,8 +8,6 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1
 | 
			
		|||
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 | 
			
		||||
github.com/elliotchance/pie/v2 v2.7.0 h1:FqoIKg4uj0G/CrLGuMS9ejnFKa92lxE1dEgBD3pShXg=
 | 
			
		||||
github.com/elliotchance/pie/v2 v2.7.0/go.mod h1:18t0dgGFH006g4eVdDtWfgFZPQEgl10IoEO8YWEq3Og=
 | 
			
		||||
github.com/goodevilgenius/go-dateparser v1.2.2 h1:Up9KokPx/h07mesQGAZQg3Xi/8yrDVn1638h3k/lRyk=
 | 
			
		||||
github.com/goodevilgenius/go-dateparser v1.2.2/go.mod h1:5xYsZ1h7iB3sE1BSu8bkjYpbFST7EU1/AFxcyO3mgYg=
 | 
			
		||||
github.com/hablullah/go-hijri v1.0.2 h1:drT/MZpSZJQXo7jftf5fthArShcaMtsal0Zf/dnmp6k=
 | 
			
		||||
github.com/hablullah/go-hijri v1.0.2/go.mod h1:OS5qyYLDjORXzK4O1adFw9Q5WfhOcMdAKglDkcTxgWQ=
 | 
			
		||||
github.com/hablullah/go-juliandays v1.0.0 h1:A8YM7wIj16SzlKT0SRJc9CD29iiaUzpBLzh5hr0/5p0=
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +22,8 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 | 
			
		|||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 | 
			
		||||
github.com/magefile/mage v1.14.0 h1:6QDX3g6z1YvJ4olPhT1wksUcSa/V0a1B+pJb73fBjyo=
 | 
			
		||||
github.com/magefile/mage v1.14.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
 | 
			
		||||
github.com/markusmobius/go-dateparser v1.2.3 h1:TvrsIvr5uk+3v6poDjaicnAFJ5IgtFHgLiuMY2Eb7Nw=
 | 
			
		||||
github.com/markusmobius/go-dateparser v1.2.3/go.mod h1:cMwQRrBUQlK1UI5TIFHEcvpsMbkWrQLXuaPNMFzuYLk=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
 | 
			
		||||
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 | 
			
		||||
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA=
 | 
			
		||||
| 
						 | 
				
			
			@ -36,8 +36,8 @@ github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0=
 | 
			
		|||
github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho=
 | 
			
		||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 | 
			
		||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 | 
			
		||||
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
 | 
			
		||||
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
 | 
			
		||||
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
 | 
			
		||||
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
 | 
			
		||||
github.com/tetratelabs/wazero v1.2.1 h1:J4X2hrGzJvt+wqltuvcSjHQ7ujQxA9gb6PeMs4qlUWs=
 | 
			
		||||
github.com/tetratelabs/wazero v1.2.1/go.mod h1:wYx2gNRg8/WihJfSDxA1TIL8H+GkfLYm+bIfbblu9VQ=
 | 
			
		||||
github.com/wasilibs/go-re2 v1.3.0 h1:LFhBNzoStM3wMie6rN2slD1cuYH2CGiHpvNL3UtcsMw=
 | 
			
		||||
| 
						 | 
				
			
			@ -46,8 +46,8 @@ github.com/wasilibs/nottinygc v0.4.0 h1:h1TJMihMC4neN6Zq+WKpLxgd9xCFMw7O9ETLwY2e
 | 
			
		|||
github.com/wasilibs/nottinygc v0.4.0/go.mod h1:oDcIotskuYNMpqMF23l7Z8uzD4TC0WXHK8jetlB3HIo=
 | 
			
		||||
golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705 h1:ba9YlqfDGTTQ5aZ2fwOoQ1hf32QySyQkR6ODGDzHlnE=
 | 
			
		||||
golang.org/x/exp v0.0.0-20220321173239-a90fa8a75705/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE=
 | 
			
		||||
golang.org/x/text v0.10.0 h1:UpjohKhiEgNc0CSauXmwYftY1+LlaC75SJwh0SgCX58=
 | 
			
		||||
golang.org/x/text v0.10.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
 | 
			
		||||
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
 | 
			
		||||
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 | 
			
		||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
 | 
			
		||||
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -24,11 +24,7 @@ func ParseString(in string) any {
 | 
			
		|||
	if null.MatchString(s) {
 | 
			
		||||
		return nil
 | 
			
		||||
	} else if yesno.MatchString(s) {
 | 
			
		||||
		if yes.MatchString(s) {
 | 
			
		||||
			return true
 | 
			
		||||
		} else {
 | 
			
		||||
			return false
 | 
			
		||||
		}
 | 
			
		||||
		return yes.MatchString(s)
 | 
			
		||||
	} else if i, err := strconv.Atoi(s); err == nil {
 | 
			
		||||
		return i
 | 
			
		||||
	} else if f, err := strconv.ParseFloat(s, 64); err == nil {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,6 +1,7 @@
 | 
			
		|||
package tools
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
	dp "github.com/markusmobius/go-dateparser"
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +24,19 @@ func ParseDate(in string) (t time.Time, err error) {
 | 
			
		|||
		return MaxTime, nil
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var er error
 | 
			
		||||
	for _, format := range []string{time.RFC3339, DateFormat} {
 | 
			
		||||
		if t, er = time.ParseInLocation(format, in, nil); er == nil {
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var ts int64
 | 
			
		||||
	if ts, er = strconv.ParseInt(in, 10, 0); er == nil {
 | 
			
		||||
		t = time.Unix(ts, 0)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	conf := dp.Configuration{
 | 
			
		||||
		CurrentTime:        time.Now().Local(),
 | 
			
		||||
		ReturnTimeAsPeriod: true,
 | 
			
		||||
| 
						 | 
				
			
			@ -32,12 +46,11 @@ func ParseDate(in string) (t time.Time, err error) {
 | 
			
		|||
	d, err := dp.Parse(&conf, in)
 | 
			
		||||
	t = d.Time
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		d, err = dp.Parse(&conf, in, DateFormat)
 | 
			
		||||
		t = d.Time
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	y, mon, day, h, loc := t.Year(), t.Month(), t.Day(), t.Hour(), t.Location()
 | 
			
		||||
 | 
			
		||||
	switch d.Period {
 | 
			
		||||
	case date.Second:
 | 
			
		||||
		t = t.Truncate(time.Second)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,7 +23,7 @@ func TestParseDate(t *testing.T) {
 | 
			
		|||
	firstMonth := time.Date(y, mon, 1, 0, 0, 0, 0, loc)
 | 
			
		||||
	firstYear := time.Date(y, 1, 1, 0, 0, 0, 0, loc)
 | 
			
		||||
	exact := "2075-02-12T12:13:54.536-02:00"
 | 
			
		||||
	exactd, _ := time.ParseInLocation(time.RFC3339, exact, time.FixedZone("UTC-02:00", -7200))
 | 
			
		||||
	exactd, _ := time.ParseInLocation(time.RFC3339, exact, nil)
 | 
			
		||||
	var ts int64 = 1708876012
 | 
			
		||||
	tsd := time.Unix(ts, 0)
 | 
			
		||||
	ent := "February 25, 2024 at 04:00:13AM +0230"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue