Added size output postgres entry
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
68833031ba
commit
42dc6f01d6
|
@ -5,7 +5,7 @@ name: default
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: backend
|
- name: backend
|
||||||
image: golang:1.17-bullseye
|
image: golang:1.18-rc-bullseye
|
||||||
commands:
|
commands:
|
||||||
- go build -o srg .
|
- go build -o srg .
|
||||||
|
|
||||||
|
|
32
.gitignore
vendored
32
.gitignore
vendored
|
@ -1,3 +1,5 @@
|
||||||
|
/.idea
|
||||||
|
|
||||||
# ---> Go
|
# ---> Go
|
||||||
# Binaries for programs and plugins
|
# Binaries for programs and plugins
|
||||||
*.exe
|
*.exe
|
||||||
|
@ -15,36 +17,6 @@
|
||||||
# Dependency directories (remove the comment below to include it)
|
# Dependency directories (remove the comment below to include it)
|
||||||
# vendor/
|
# vendor/
|
||||||
|
|
||||||
# ---> JetBrains
|
|
||||||
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
|
|
||||||
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
|
|
||||||
|
|
||||||
# User-specific stuff
|
|
||||||
.idea/**/workspace.xml
|
|
||||||
.idea/**/tasks.xml
|
|
||||||
.idea/**/usage.statistics.xml
|
|
||||||
.idea/**/dictionaries
|
|
||||||
.idea/**/shelf
|
|
||||||
|
|
||||||
# AWS User-specific
|
|
||||||
.idea/**/aws.xml
|
|
||||||
|
|
||||||
# Generated files
|
|
||||||
.idea/**/contentModel.xml
|
|
||||||
|
|
||||||
# Sensitive or high-churn files
|
|
||||||
.idea/**/dataSources/
|
|
||||||
.idea/**/dataSources.ids
|
|
||||||
.idea/**/dataSources.local.xml
|
|
||||||
.idea/**/sqlDataSources.xml
|
|
||||||
.idea/**/dynamic.xml
|
|
||||||
.idea/**/uiDesigner.xml
|
|
||||||
.idea/**/dbnavigator.xml
|
|
||||||
|
|
||||||
# Gradle
|
|
||||||
.idea/**/gradle.xml
|
|
||||||
.idea/**/libraries
|
|
||||||
|
|
||||||
# Gradle and Maven with auto-import
|
# Gradle and Maven with auto-import
|
||||||
# When using Gradle or Maven with auto-import, you should exclude module files,
|
# When using Gradle or Maven with auto-import, you should exclude module files,
|
||||||
# since they will be recreated, and may cause churn. Uncomment if using
|
# since they will be recreated, and may cause churn. Uncomment if using
|
||||||
|
|
103
SynchRoGazer.go
103
SynchRoGazer.go
|
@ -23,9 +23,18 @@ type HashFileResult struct {
|
||||||
Path string
|
Path string
|
||||||
SHA256 string
|
SHA256 string
|
||||||
MD5 string
|
MD5 string
|
||||||
|
Size uint64
|
||||||
}
|
}
|
||||||
|
|
||||||
func HashFile(results chan<- HashFileResult, md5hasher *md5simd.Hasher, sha256hasher *hash.Hash, path string) {
|
func HashFile(results chan<- HashFileResult, md5hasher *md5simd.Hasher, sha256hasher *hash.Hash, path string) {
|
||||||
|
fi, err := os.Stat(path)
|
||||||
|
if err != nil {
|
||||||
|
results <- HashFileResult{
|
||||||
|
Error: err,
|
||||||
|
Path: path,
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
fh, err := os.Open(path)
|
fh, err := os.Open(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
results <- HashFileResult{
|
results <- HashFileResult{
|
||||||
|
@ -43,6 +52,7 @@ func HashFile(results chan<- HashFileResult, md5hasher *md5simd.Hasher, sha256ha
|
||||||
Path: path,
|
Path: path,
|
||||||
SHA256: hex.EncodeToString((*sha256hasher).Sum(nil)),
|
SHA256: hex.EncodeToString((*sha256hasher).Sum(nil)),
|
||||||
MD5: hex.EncodeToString((*md5hasher).Sum(nil)),
|
MD5: hex.EncodeToString((*md5hasher).Sum(nil)),
|
||||||
|
Size: uint64(fi.Size()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -83,16 +93,41 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
|
||||||
hMd5, _ := hex.DecodeString(result.MD5)
|
hMd5, _ := hex.DecodeString(result.MD5)
|
||||||
hSha256, _ := hex.DecodeString(result.SHA256)
|
hSha256, _ := hex.DecodeString(result.SHA256)
|
||||||
|
|
||||||
|
var stmt *sql.Stmt
|
||||||
|
|
||||||
switch settings.Mode {
|
switch settings.Mode {
|
||||||
case "insert_binary":
|
case "insert_binary":
|
||||||
rows, err = settings.InsertSTMT.Query(result.Path, hMd5, hSha256)
|
fallthrough
|
||||||
case "update_binary":
|
|
||||||
rows, err = settings.UpdateSTMT.Query(result.Path, hMd5, hSha256)
|
|
||||||
break
|
|
||||||
case "insert":
|
case "insert":
|
||||||
rows, err = settings.InsertSTMT.Query(result.Path, result.MD5, result.SHA256)
|
stmt = settings.InsertSTMT
|
||||||
|
case "update_binary":
|
||||||
|
fallthrough
|
||||||
case "update":
|
case "update":
|
||||||
rows, err = settings.UpdateSTMT.Query(result.Path, result.MD5, result.SHA256)
|
stmt = settings.UpdateSTMT
|
||||||
|
break
|
||||||
|
}
|
||||||
|
|
||||||
|
if stmt == nil {
|
||||||
|
fmt.Fprintln(os.Stderr, result.Path, "Invalid statement for mode: ", settings.Mode)
|
||||||
|
}
|
||||||
|
|
||||||
|
switch settings.Mode {
|
||||||
|
case "insert_binary":
|
||||||
|
fallthrough
|
||||||
|
case "update_binary":
|
||||||
|
if settings.HasSize {
|
||||||
|
rows, err = stmt.Query(result.Path, hMd5, hSha256, result.Size)
|
||||||
|
} else {
|
||||||
|
rows, err = stmt.Query(result.Path, hMd5, hSha256)
|
||||||
|
}
|
||||||
|
case "insert":
|
||||||
|
fallthrough
|
||||||
|
case "update":
|
||||||
|
if settings.HasSize {
|
||||||
|
rows, err = stmt.Query(result.Path, result.MD5, result.SHA256, result.Size)
|
||||||
|
} else {
|
||||||
|
rows, err = stmt.Query(result.Path, result.MD5, result.SHA256)
|
||||||
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -107,8 +142,8 @@ func PostgresHashFileResult(result *HashFileResult, settings PostgresSettings) {
|
||||||
}
|
}
|
||||||
|
|
||||||
type PostgresSettings struct {
|
type PostgresSettings struct {
|
||||||
ConnStr string
|
|
||||||
Mode string
|
Mode string
|
||||||
|
HasSize bool
|
||||||
InsertSTMT *sql.Stmt
|
InsertSTMT *sql.Stmt
|
||||||
UpdateSTMT *sql.Stmt
|
UpdateSTMT *sql.Stmt
|
||||||
}
|
}
|
||||||
|
@ -129,40 +164,60 @@ func main() {
|
||||||
pgPathRow := flag.String("pg_row_path", "path", "Postgres output row: path")
|
pgPathRow := flag.String("pg_row_path", "path", "Postgres output row: path")
|
||||||
pgMd5Row := flag.String("pg_row_md5", "md5", "Postgres output row: md5")
|
pgMd5Row := flag.String("pg_row_md5", "md5", "Postgres output row: md5")
|
||||||
pgSha256Row := flag.String("pg_row_sha256", "sha256", "Postgres output row: sha256")
|
pgSha256Row := flag.String("pg_row_sha256", "sha256", "Postgres output row: sha256")
|
||||||
|
pgSizeRow := flag.String("pg_row_size", "", "Postgres output row: size")
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
pgSettings := PostgresSettings{
|
pgSettings := PostgresSettings{
|
||||||
*pgConnStr,
|
Mode: *pgMode,
|
||||||
*pgMode,
|
HasSize: len(*pgSizeRow) > 0,
|
||||||
nil,
|
|
||||||
nil,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if *outputFormat == "postgres" && pgSettings.ConnStr != "" {
|
if *outputFormat == "postgres" && *pgConnStr != "" {
|
||||||
handle, err := sql.Open("postgres", *pgConnStr)
|
handle, err := sql.Open("postgres", *pgConnStr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer handle.Close()
|
defer handle.Close()
|
||||||
|
|
||||||
pgSettings.InsertSTMT, err = handle.Prepare(fmt.Sprintf("INSERT INTO %s (%s, %s, %s) VALUES ($1, $2, $3);",
|
if len(*pgSizeRow) > 0 {
|
||||||
pq.QuoteIdentifier(*pgTable),
|
pgSettings.InsertSTMT, err = handle.Prepare(fmt.Sprintf("INSERT INTO %s (%s, %s, %s, %s) VALUES ($1, $2, $3, $4);",
|
||||||
pq.QuoteIdentifier(*pgPathRow),
|
pq.QuoteIdentifier(*pgTable),
|
||||||
pq.QuoteIdentifier(*pgMd5Row),
|
pq.QuoteIdentifier(*pgPathRow),
|
||||||
pq.QuoteIdentifier(*pgSha256Row),
|
pq.QuoteIdentifier(*pgMd5Row),
|
||||||
))
|
pq.QuoteIdentifier(*pgSha256Row),
|
||||||
|
pq.QuoteIdentifier(*pgSizeRow),
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
pgSettings.InsertSTMT, err = handle.Prepare(fmt.Sprintf("INSERT INTO %s (%s, %s, %s) VALUES ($1, $2, $3);",
|
||||||
|
pq.QuoteIdentifier(*pgTable),
|
||||||
|
pq.QuoteIdentifier(*pgPathRow),
|
||||||
|
pq.QuoteIdentifier(*pgMd5Row),
|
||||||
|
pq.QuoteIdentifier(*pgSha256Row),
|
||||||
|
))
|
||||||
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
defer pgSettings.InsertSTMT.Close()
|
defer pgSettings.InsertSTMT.Close()
|
||||||
|
|
||||||
pgSettings.UpdateSTMT, err = handle.Prepare(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3 WHERE %s = $1;",
|
if len(*pgSizeRow) > 0 {
|
||||||
pq.QuoteIdentifier(*pgTable),
|
pgSettings.UpdateSTMT, err = handle.Prepare(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3, %s = $4 WHERE %s = $1;",
|
||||||
pq.QuoteIdentifier(*pgPathRow),
|
pq.QuoteIdentifier(*pgTable),
|
||||||
pq.QuoteIdentifier(*pgMd5Row),
|
pq.QuoteIdentifier(*pgPathRow),
|
||||||
pq.QuoteIdentifier(*pgSha256Row),
|
pq.QuoteIdentifier(*pgMd5Row),
|
||||||
))
|
pq.QuoteIdentifier(*pgSha256Row),
|
||||||
|
pq.QuoteIdentifier(*pgSizeRow),
|
||||||
|
))
|
||||||
|
} else {
|
||||||
|
pgSettings.UpdateSTMT, err = handle.Prepare(fmt.Sprintf("UPDATE %s SET %s = $2, %s = $3 WHERE %s = $1;",
|
||||||
|
pq.QuoteIdentifier(*pgTable),
|
||||||
|
pq.QuoteIdentifier(*pgPathRow),
|
||||||
|
pq.QuoteIdentifier(*pgMd5Row),
|
||||||
|
pq.QuoteIdentifier(*pgSha256Row),
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
3
go.mod
3
go.mod
|
@ -1,8 +1,9 @@
|
||||||
module git.gammaspectra.live/S.O.N.G/SynchRoGazer
|
module git.gammaspectra.live/S.O.N.G/SynchRoGazer
|
||||||
|
|
||||||
go 1.14
|
go 1.17
|
||||||
|
|
||||||
require (
|
require (
|
||||||
|
github.com/klauspost/cpuid/v2 v2.0.9 // indirect
|
||||||
github.com/lib/pq v1.10.4
|
github.com/lib/pq v1.10.4
|
||||||
github.com/minio/md5-simd v1.1.2
|
github.com/minio/md5-simd v1.1.2
|
||||||
github.com/minio/sha256-simd v1.0.0
|
github.com/minio/sha256-simd v1.0.0
|
||||||
|
|
2
go.sum
2
go.sum
|
@ -1,6 +1,8 @@
|
||||||
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.1/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw=
|
github.com/klauspost/cpuid/v2 v2.0.4 h1:g0I61F2K2DjRHz1cnxlkNSBIaePVoJIjjnHui8QHbiw=
|
||||||
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4=
|
||||||
|
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
|
||||||
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
||||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||||
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34=
|
||||||
|
|
Loading…
Reference in a new issue