-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfunctions.go
133 lines (109 loc) · 2.58 KB
/
functions.go
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package main
import (
"archive/tar"
"bytes"
"encoding/json"
"errors"
"io"
"log"
"os"
"path/filepath"
"strings"
"github.com/streadway/amqp"
)
// Getenv ... Retrives an environment variable but provides a default fallback value if empty
func Getenv(key string, fallback string) string {
value := os.Getenv(key)
if len(value) == 0 {
return fallback
}
return value
}
// FailOnError ... A simple function to handle errors
func FailOnError(err error, msg string) {
if err != nil {
log.Fatalf("%s: %s", msg, err)
}
}
// CreateTar ... Creates a tar from a directory
func CreateTar(src string, dest string) error {
log.Printf("Creating tar...")
if _, err := os.Stat(src); os.IsNotExist(err) {
return errors.New("Project directory does not exsit :(")
}
var buffer bytes.Buffer
compress(src, &buffer)
fileToWrite, err := os.OpenFile(dest, os.O_CREATE|os.O_RDWR, os.FileMode(600))
defer fileToWrite.Close()
if err != nil {
return err
}
if _, err := io.Copy(fileToWrite, &buffer); err != nil {
return err
}
log.Printf("Done !")
return nil
}
// Compress ... Compresses a directory into a tar writter buffer
func compress(src string, buf io.Writer) error {
tw := tar.NewWriter(buf)
sourcePath := filepath.ToSlash(src)
defer tw.Close()
filepath.Walk(src, func(file string, fi os.FileInfo, err error) error {
header, err := tar.FileInfoHeader(fi, file)
if err != nil {
return err
}
header.Name = filepath.ToSlash(file)
if sourcePath == header.Name {
return nil
}
header.Name = header.Name[len(sourcePath)+1:]
if err := tw.WriteHeader(header); err != nil {
return err
}
if !fi.IsDir() {
data, err := os.Open(file)
if err != nil {
return err
}
if _, err := io.Copy(tw, data); err != nil {
return err
}
}
return nil
})
if err := tw.Close(); err != nil {
return err
}
return nil
}
// RemoveEncyptionFromID ... Removes the encryption type from the id string
func RemoveEncyptionFromID(id string) string {
idx := strings.Index(id, ":")
if idx > -1 {
return id[idx+1:]
}
return id
}
// SendEventMessage ... Sends a message to the rabbitMQ event queue
func SendEventMessage(eventMessage EventMessage, channel *amqp.Channel, queue string) {
log.Printf("Sending to events : %+v", eventMessage)
body, err := json.Marshal(eventMessage)
if err != nil {
log.Printf(err.Error())
return
}
err = channel.Publish(
"", // exchange
queue, // routing key
false, // mandatory
false, // immediate
amqp.Publishing{
ContentType: "application/json",
Body: body,
})
if err != nil {
log.Printf(err.Error())
}
}