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  }