Skip to content

Commit b42313a

Browse files
committed
Add internal asset mode in order to make deployment easier
1 parent 418573b commit b42313a

File tree

5 files changed

+106
-14
lines changed

5 files changed

+106
-14
lines changed

Gopkg.lock

+7-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

asset/asset.go

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package asset
2+
3+
import (
4+
"time"
5+
6+
"github.com/jessevdk/go-assets"
7+
)
8+
9+
// Assets returns go-assets FileSystem
10+
var Assets = assets.NewFileSystem(map[string][]string{"/": []string{"empty"}, "empty": []string{}}, map[string]*assets.File{
11+
"/": &assets.File{
12+
Path: "/",
13+
FileMode: 0x800001fd,
14+
Mtime: time.Unix(1526216369, 1526216369476487549),
15+
Data: nil,
16+
}, "empty": &assets.File{
17+
Path: "empty",
18+
FileMode: 0x800001fd,
19+
Mtime: time.Unix(1526216369, 1526216369476487549),
20+
Data: nil,
21+
}}, "")

client/root.go

+8-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ If you want to know what API endpoints clay has, send a GET request to the path
2727
CLAY_HOST [Default: %-21v Current: %v]
2828
CLAY_PORT [Default: %-21v Current: %v]
2929
CLAY_DB_MODE [Default: %-21v Current: %v]
30-
CLAY_DB_FILE_PATH [Default: %-21v Current: %v]`,
30+
CLAY_DB_FILE_PATH [Default: %-21v Current: %v]
31+
CLAY_ASSET_MODE [Default: %-21v Current: %v]`,
3132
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayConfigFilePath()),
3233
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayConfigFilePath()),
3334
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayHost()),
@@ -38,6 +39,8 @@ If you want to know what API endpoints clay has, send a GET request to the path
3839
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayDBMode()),
3940
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayDBFilePath()),
4041
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayDBFilePath()),
42+
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayAssetMode()),
43+
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayAssetMode()),
4144
)
4245
extension.GetRegisteredRuntime().Run()
4346
},
@@ -67,7 +70,8 @@ Environmental Variables:
6770
CLAY_HOST [Default: %-21v Current: %v]
6871
CLAY_PORT [Default: %-21v Current: %v]
6972
CLAY_DB_MODE [Default: %-21v Current: %v]
70-
CLAY_DB_FILE_PATH [Default: %-21v Current: %v]{{if gt (len .Aliases) 0}}
73+
CLAY_DB_FILE_PATH [Default: %-21v Current: %v]
74+
CLAY_ASSET_MODE [Default: %-21v Current: %v]{{if gt (len .Aliases) 0}}
7175
7276
Aliases:
7377
{{.NameAndAliases}}{{end}}{{if .HasExample}}
@@ -99,6 +103,8 @@ Use "{{.CommandPath}} [command] --help" for more information about a command.{{e
99103
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayDBMode()),
100104
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayDBFilePath()),
101105
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayDBFilePath()),
106+
fmt.Sprintf(`"%s",`, defaultEnvironmentalVariableSet.GetClayAssetMode()),
107+
fmt.Sprintf(`"%s"`, environmentalVariableSet.GetClayAssetMode()),
102108
),
103109
)
104110
}

extension/runtime.go

+8
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ type EnvironmentalVariableSet struct {
3131
clayPort string
3232
clayDBMode string
3333
clayDBFilePath string
34+
clayAssetMode string
3435
}
3536

3637
func getEnvironmentalVariable(name string, defaultValue string) string {
@@ -48,6 +49,7 @@ var defaultEnvironmentVariableSet = EnvironmentalVariableSet{
4849
clayPort: "8080",
4950
clayDBMode: "file",
5051
clayDBFilePath: "./clay.db",
52+
clayAssetMode: "external",
5153
}
5254

5355
var currentEnvironmentalVariableSet = EnvironmentalVariableSet{
@@ -56,6 +58,7 @@ var currentEnvironmentalVariableSet = EnvironmentalVariableSet{
5658
clayPort: getEnvironmentalVariable("CLAY_PORT", defaultEnvironmentVariableSet.clayPort),
5759
clayDBMode: getEnvironmentalVariable("CLAY_DB_MODE", defaultEnvironmentVariableSet.clayDBMode),
5860
clayDBFilePath: getEnvironmentalVariable("CLAY_DB_FILE_PATH", defaultEnvironmentVariableSet.clayDBFilePath),
61+
clayAssetMode: getEnvironmentalVariable("CLAY_ASSET_MODE", defaultEnvironmentVariableSet.clayAssetMode),
5962
}
6063

6164
// GetDefaultEnvironmentalVariableSet returns default environmental variable set
@@ -102,3 +105,8 @@ func (receiver *EnvironmentalVariableSet) GetClayDBMode() string {
102105
func (receiver *EnvironmentalVariableSet) GetClayDBFilePath() string {
103106
return receiver.clayDBFilePath
104107
}
108+
109+
// GetClayAssetMode returns CLAY_ASSET_MODE
110+
func (receiver *EnvironmentalVariableSet) GetClayAssetMode() string {
111+
return receiver.clayAssetMode
112+
}

runtime/initializer.go

+62-11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"github.com/gin-gonic/gin"
88
"github.com/jinzhu/gorm"
9+
"github.com/qb0C80aE/clay/asset"
910
"github.com/qb0C80aE/clay/extension"
1011
"github.com/qb0C80aE/clay/logging"
1112
"github.com/qb0C80aE/clay/model"
@@ -57,6 +58,63 @@ type clayConfigURLAlias struct {
5758
Query string `json:"query"`
5859
}
5960

61+
func (receiver *clayRuntimeInitializer) readFile(filePath string) ([]byte, error) {
62+
environmentalVariableSet := extension.GetCurrentEnvironmentalVariableSet()
63+
switch environmentalVariableSet.GetClayAssetMode() {
64+
case "internal":
65+
file, err := asset.Assets.Open(filePath)
66+
if err != nil {
67+
logging.Logger().Debug(err.Error())
68+
return nil, err
69+
}
70+
defer file.Close()
71+
72+
return ioutil.ReadAll(file)
73+
case "external":
74+
return ioutil.ReadFile(filePath)
75+
}
76+
77+
logging.Logger().Debugf("invalid asset mode %s", environmentalVariableSet.GetClayAssetMode())
78+
return nil, fmt.Errorf("invalid asset mode %s", environmentalVariableSet.GetClayAssetMode())
79+
}
80+
81+
func (receiver *clayRuntimeInitializer) copyFromFile(writer io.Writer, filePath string) error {
82+
environmentalVariableSet := extension.GetCurrentEnvironmentalVariableSet()
83+
switch environmentalVariableSet.GetClayAssetMode() {
84+
case "internal":
85+
file, err := asset.Assets.Open(filePath)
86+
if err != nil {
87+
logging.Logger().Debug(err.Error())
88+
return err
89+
}
90+
defer file.Close()
91+
92+
if _, err = io.Copy(writer, file); err != nil {
93+
logging.Logger().Critical(err.Error())
94+
return err
95+
}
96+
97+
return nil
98+
case "external":
99+
file, err := os.Open(filePath)
100+
if err != nil {
101+
logging.Logger().Critical(err.Error())
102+
return err
103+
}
104+
defer file.Close()
105+
106+
if _, err = io.Copy(writer, file); err != nil {
107+
logging.Logger().Critical(err.Error())
108+
return err
109+
}
110+
111+
return nil
112+
}
113+
114+
logging.Logger().Debugf("invalid asset mode %s", environmentalVariableSet.GetClayAssetMode())
115+
return fmt.Errorf("invalid asset mode %s", environmentalVariableSet.GetClayAssetMode())
116+
}
117+
60118
func (receiver *clayRuntimeInitializer) initialize() {
61119
environmentalVariableSet := extension.GetCurrentEnvironmentalVariableSet()
62120
configFilePath := environmentalVariableSet.GetClayConfigFilePath()
@@ -98,7 +156,7 @@ func (receiver *clayRuntimeInitializer) initialize() {
98156
configFilePath = path.Join(dir, "clay_config.json")
99157
}
100158

101-
configJSONData, err := ioutil.ReadFile(configFilePath)
159+
configJSONData, err := receiver.readFile(configFilePath)
102160
if err != nil {
103161
logging.Logger().Debugf("cloud not load %s, just boot up without initial configuration", configFilePath)
104162
return
@@ -134,7 +192,7 @@ func (receiver *clayRuntimeInitializer) initialize() {
134192
func (receiver *clayRuntimeInitializer) loadUserDefinedModels(config *clayConfig, host string, port int) error {
135193
for _, userDefinedModel := range config.UserDefinedModels {
136194
filePath := filepath.Join(config.General.UserDefinedModelsDirectory, userDefinedModel.FileName)
137-
jsonData, err := ioutil.ReadFile(filePath)
195+
jsonData, err := receiver.readFile(filePath)
138196
if err != nil {
139197
logging.Logger().Critical(err.Error())
140198
return err
@@ -171,7 +229,7 @@ func (receiver *clayRuntimeInitializer) loadUserDefinedModels(config *clayConfig
171229
func (receiver *clayRuntimeInitializer) loadEphemeralTemplates(config *clayConfig, host string, port int) error {
172230
for _, ephemeralTemplate := range config.EphemeralTemplates {
173231
filePath := filepath.Join(config.General.EphemeralTemplatesDirectory, ephemeralTemplate.FileName)
174-
data, err := ioutil.ReadFile(filePath)
232+
data, err := receiver.readFile(filePath)
175233
if err != nil {
176234
logging.Logger().Critical(err.Error())
177235
return err
@@ -238,14 +296,7 @@ func (receiver *clayRuntimeInitializer) loadEphemeralBinaryObjects(config *clayC
238296
return err
239297
}
240298

241-
file, err := os.Open(filePath)
242-
if err != nil {
243-
logging.Logger().Critical(err.Error())
244-
return err
245-
}
246-
defer file.Close()
247-
248-
if _, err = io.Copy(contentWriter, file); err != nil {
299+
if err := receiver.copyFromFile(contentWriter, filePath); err != nil {
249300
logging.Logger().Critical(err.Error())
250301
return err
251302
}

0 commit comments

Comments
 (0)