1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
package main
import (
"crypto/sha256"
"encoding/binary"
"encoding/hex"
log "github.com/sirupsen/logrus"
"go.mongodb.org/mongo-driver/bson/primitive"
"io"
"os"
"time"
)
const invalidHashString = "invalid"
func Sha256Sum(fileName string) (string, error) {
f, err := os.Open(fileName)
if err != nil {
return invalidHashString, err
}
defer func() {
err = f.Close()
if err != nil {
log.Println("Cannot close file " + fileName)
}
}()
h := sha256.New()
if _, err := io.Copy(h, f); err != nil {
return invalidHashString, err
}
return string(h.Sum(nil)), nil
}
func CustomRowID(payload uint64, timestamp time.Time) RowID {
var key [12]byte
binary.BigEndian.PutUint32(key[0:4], uint32(timestamp.Unix()))
binary.BigEndian.PutUint64(key[4:12], payload)
if oid, err := primitive.ObjectIDFromHex(hex.EncodeToString(key[:])); err == nil {
return oid
} else {
log.WithError(err).Warn("failed to create object id")
return primitive.NewObjectID()
}
}
func NewRowID() RowID {
return primitive.NewObjectID()
}
func EmptyRowID() RowID {
return [12]byte{}
}
func RowIDFromHex(hex string) (RowID, error) {
rowID, err := primitive.ObjectIDFromHex(hex)
return rowID, err
}
|