github.com/jiasir/deis@v1.12.2/logger/storage/factory.go (about) 1 package storage 2 3 import ( 4 "fmt" 5 "regexp" 6 "strconv" 7 8 "github.com/deis/deis/logger/storage/file" 9 "github.com/deis/deis/logger/storage/ringbuffer" 10 ) 11 12 // Exported so it can be set by an external agent-- namely main.go, which does some flag parsing. 13 var LogRoot string 14 15 var memoryAdapterRegex *regexp.Regexp 16 17 func init() { 18 memoryAdapterRegex = regexp.MustCompile(`^memory(?::(\d+))?$`) 19 } 20 21 // NewAdapter returns a pointer to an appropriate implementation of the Adapter interface, as 22 // determined by the storeageAdapterType string it is passed. 23 func NewAdapter(storeageAdapterType string) (Adapter, error) { 24 if storeageAdapterType == "" || storeageAdapterType == "file" { 25 adapter, err := file.NewStorageAdapter(LogRoot) 26 if err != nil { 27 return nil, err 28 } 29 return adapter, nil 30 } 31 match := memoryAdapterRegex.FindStringSubmatch(storeageAdapterType) 32 if match == nil { 33 return nil, fmt.Errorf("Unrecognized storage adapter type: '%s'", storeageAdapterType) 34 } 35 sizeStr := match[1] 36 if sizeStr == "" { 37 sizeStr = "1000" 38 } 39 size, err := strconv.Atoi(sizeStr) 40 if err != nil { 41 return nil, err 42 } 43 adapter, err := ringbuffer.NewStorageAdapter(size) 44 if err != nil { 45 return nil, err 46 } 47 return adapter, nil 48 }