blob: 0c19a1cf4137df5e1adda71836e8187981f886b7 [file] [log] [blame]
package sharedconfig
import (
"time"
"github.com/BurntSushi/toml"
)
// tomlDuration is a simple struct wrapper to allow us to parse strings as durations
// from the incoming toml file (e.g,. RunEvery = "5m")
type TomlDuration struct {
time.Duration
}
func (d *TomlDuration) UnmarshalText(text []byte) error {
var err error
d.Duration, err = time.ParseDuration(string(text))
return err
}
// DataSource is a single ingestion source. Currently we use the convention
// that if 'bucket' is empty, we assume a source on the local file system.
type DataSource struct {
Bucket string // Bucket in Google storage. If empty local storage is assumed.
Dir string // Root directory of the data to ingest.
}
type IngesterConfig struct {
RunEvery TomlDuration // How often the ingester should pull data from Google Storage.
NCommits int // Minimum number of commits that should be ingested.
MinDays int // Minimum number of days that should be covered by the ingested commits.
StatusDir string // Path where the ingest process keeps its status between restarts.
MetricName string // What to call this ingester's data when imported to Graphite
LocalCache bool // Should the ingester keep a local cache of ingested files.
Sources []*DataSource // Input sources where the ingester reads from.
ExtraParams map[string]string // Any additional needed parameters (ingester specific)
}
// Config is a struct to configure multiple ingesters.
type Config struct {
GitRepoDir string // Directory location for the repo.
GitRepoURL string // Git URL of the repo.
Ingesters map[string]*IngesterConfig
}
// ConfigFromTomlFile parses a TOML file into a Config struct.
func ConfigFromTomlFile(path string) (*Config, error) {
ret := &Config{}
if _, err := toml.DecodeFile(path, ret); err != nil {
return nil, err
}
return ret, nil
}