Skip to content

Commit

Permalink
fix #40. Replace json with toml for configuration
Browse files Browse the repository at this point in the history
  • Loading branch information
jvshahid committed Dec 11, 2013
1 parent 9820153 commit 69544aa
Show file tree
Hide file tree
Showing 9 changed files with 120 additions and 36 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@
- [Issue #62](https://github.com/influxdb/influxdb/issues/62). Support updating and deleting column values
- [Issue #96](https://github.com/influxdb/influxdb/issues/96). Replicate deletes in a cluster
- [Issue #94](https://github.com/influxdb/influxdb/issues/94). delete queries
- [Issue #116](https://github.com/influxdb/influxdb/issues/116). Use proper logging
- [Issue #40](https://github.com/influxdb/influxdb/issues/40). Use TOML instead of JSON in the config file

## Bugfixes

Expand Down
53 changes: 36 additions & 17 deletions Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ endif
export GOARCH
export CGO_ENABLED

.PHONY: all valgrind parser package package_init build
.PHONY: all valgrind parser package package_init build binary_package

all: | parser valgrind build test integration_test

Expand Down Expand Up @@ -100,6 +100,7 @@ github.com/fitstar/falcore/filter \
github.com/gorilla/mux \
github.com/goraft/raft \
github.com/influxdb/go-cache \
github.com/stvp/go-toml-config \
$(proto_dependency)

dependencies_paths := $(addprefix src/,$(dependencies))
Expand Down Expand Up @@ -224,31 +225,49 @@ $(source_package): dependencies
rm -rf src/$(levigo_dependency)
rm -rf admin

sample_config = ' \
{ \
"AdminHttpPort": 8083, \
"AdminAssetsDir": "/opt/influxdb/current/admin", \
"ApiHttpPort": 8086, \
"RaftServerPort": 8090, \
"SeedServers": [], \
"DataDir": "/opt/influxdb/shared/data/db", \
"RaftDir": "/opt/influxdb/shared/data/raft" \
} \
'

$(binary_package): $(admin_dir)/build build
define sample_config
# A command separated list of servers to seed
# this server. this is only relevant when the
# server is joining a new cluster. Otherwise
# the server will use the list of known servers
# prior to shutting down

# seed-servers =
datadir = "/opt/influxdb/shared/data/db"

# Configure the admin server
[admin]
# port = 8083
assets = "/opt/influxdb/current/admin"

# Configure the http api
[api]
# port = 8086

# Raft configuration
[raft]
# port = 8090
dir = "/opt/influxdb/shared/data/raft"

# Protobuf configuration
[protobuf]
# port = 8099
endef
export sample_config

$(binary_package): $(admin_dir)/build build packages
rm -rf build
mkdir build
mv daemon build/influxdb
mkdir build/admin
cp -R $(admin_dir)/build/* build/admin/
cp -R scripts/ build/
rm -f build/scripts/post_install.sh.bak
@echo $(sample_config) > build/config.json
sed -i.bak 's/,/,\n/g' build/config.json
rm build/config.json.bak
@echo "$$sample_config" > build/config.toml
tar -czf $(binary_package) build/*

binary_package: $(binary_package)

packages:
mkdir $@

Expand Down
10 changes: 0 additions & 10 deletions config.json.sample

This file was deleted.

26 changes: 26 additions & 0 deletions config.toml.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# A command separated list of servers to seed
# this server. this is only relevant when the
# server is joining a new cluster. Otherwise
# the server will use the list of known servers
# prior to shutting down

# seed-servers =
# datadir = "/tmp/influxdb/development/db"

# Configure the admin server
[admin]
# port = 8083
# assets = "./admin"

# Configure the http api
[api]
# port = 8086

# Raft configuration
[raft]
# port = 8090
# dir = "/tmp/influxdb/development/raft"

# Protobuf configuration
[protobuf]
port = 8099
6 changes: 3 additions & 3 deletions scripts/init.sh
Original file line number Diff line number Diff line change
Expand Up @@ -87,11 +87,11 @@ case $1 in
# Log the message appropriately
cd /
if which start-stop-daemon > /dev/null 2>&1; then
nohup start-stop-daemon -d / --start --quiet --oknodo --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config /opt/$name/shared/config.json > /dev/null 2>> /opt/$name/shared/log.txt &
nohup start-stop-daemon -d / --start --quiet --oknodo --pidfile $pidfile --exec $daemon -- -pidfile $pidfile -config /opt/$name/shared/config.toml > /dev/null 2>> /opt/$name/shared/log.txt &
elif set | egrep '^start_daemon' > /dev/null 2>&1; then
start_daemon ${daemon}-daemon -pidfile $pidfile -config /opt/$name/shared/config.json
start_daemon ${daemon}-daemon -pidfile $pidfile -config /opt/$name/shared/config.toml
else
sudo ${daemon}-daemon -pidfile $pidfile -config /opt/$name/shared/config.json
sudo ${daemon}-daemon -pidfile $pidfile -config /opt/$name/shared/config.toml
fi
log_success_msg "Anomalous agent started"
;;
Expand Down
2 changes: 1 addition & 1 deletion scripts/post_install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ ln -sfn $influx_dir/versions/$version $influx_dir/current
[ -e /usr/bin/influxdb ] || ln -sfn $influx_dir/current/influxdb /usr/bin/influxdb
[ -e /usr/bin/influxdb-daemon ] || ln -sfn $influx_dir/current/scripts/influxdb-daemon.sh /usr/bin/influxdb-daemon
[ -d $influx_dir/shared ] || mkdir $influx_dir/shared
[ -e $influx_dir/shared/config.json ] || cp $influx_dir/current/config.json $influx_dir/shared/
[ -e $influx_dir/shared/config.toml ] || cp $influx_dir/current/config.toml $influx_dir/shared/
touch $influx_dir/shared/log.txt
if [ ! -L /etc/init.d/influxdb ]; then
ln -sfn $influx_dir/current/scripts/init.sh /etc/init.d/influxdb
Expand Down
53 changes: 50 additions & 3 deletions src/configuration/configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,12 @@ package configuration
import (
log "code.google.com/p/log4go"
"encoding/json"
"flag"
"fmt"
"github.com/stvp/go-toml-config"
"io/ioutil"
"os"
"strings"
)

type Configuration struct {
Expand All @@ -21,22 +24,66 @@ type Configuration struct {
}

func LoadConfiguration(fileName string) *Configuration {
config, err := parseTomlConfiguration(fileName)
if err != nil {
log.Error("Couldn't parse configuration file: " + fileName)
panic(err)
}
return config
}

func parseTomlConfiguration(filename string) (*Configuration, error) {
configSet := config.NewConfigSet("influxdb", flag.ContinueOnError)
adminPort := configSet.Int("admin.port", 8083)
adminAssetsDir := configSet.String("admin.assets", "./admin")
apiHttpPort := configSet.Int("api.port", 8086)
raftPort := configSet.Int("raft.port", 8090)
raftDir := configSet.String("raft.dir", "/tmp/influxdb/development/raft")
seedServers := configSet.String("seed-servers", "")
dataDir := configSet.String("datadir", "/tmp/influxdb/development/db")
protobufPort := configSet.Int("protobuf.port", 8099)

if err := configSet.Parse(filename); err != nil {
return nil, err
}

config := &Configuration{
AdminHttpPort: *adminPort,
AdminAssetsDir: *adminAssetsDir,
ApiHttpPort: *apiHttpPort,
RaftServerPort: *raftPort,
RaftDir: *raftDir,
ProtobufPort: *protobufPort,
DataDir: *dataDir,
}

servers := strings.Split(*seedServers, ",")
for _, server := range servers {
server = strings.TrimSpace(server)
if server == "" {
continue
}
config.SeedServers = append(config.SeedServers, server)
}
return config, nil
}

func parseJsonConfiguration(fileName string) (*Configuration, error) {
log.Info("Loading Config from " + fileName)
config := &Configuration{}

data, err := ioutil.ReadFile(fileName)
if err == nil {
err = json.Unmarshal(data, config)
if err != nil {
log.Error("Couldn't parse configuration file: " + fileName)
panic(err)
return nil, err
}
} else {
log.Error("Couldn't load configuration file: " + fileName)
panic(err)
}

return config
return config, nil
}

func (self *Configuration) AdminHttpPortString() string {
Expand Down
2 changes: 1 addition & 1 deletion src/configuration/configuration_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,6 @@ type LoadConfigurationSuite struct{}
var _ = Suite(&LoadConfigurationSuite{})

func (self *LoadConfigurationSuite) TestConfig(c *C) {
config := LoadConfiguration("../../config.json.sample")
config := LoadConfiguration("../../config.toml.sample")
c.Assert(config.DataDir, Equals, "/tmp/influxdb/development/db")
}
2 changes: 1 addition & 1 deletion src/daemon/influxd.go
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ func setupLogging(loggingLevel string) {
}

func main() {
fileName := flag.String("config", "config.json.sample", "Config file")
fileName := flag.String("config", "config.toml.sample", "Config file")
wantsVersion := flag.Bool("v", false, "Get version number")
resetRootPassword := flag.Bool("reset-root", false, "Reset root password")
pidFile := flag.String("pidfile", "", "the pid file")
Expand Down

0 comments on commit 69544aa

Please sign in to comment.