github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/util/util.go (about)

     1  package util
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"net/http"
     7  	"regexp"
     8  	"strconv"
     9  
    10  	"github.com/gorilla/handlers"
    11  	"github.com/satori/go.uuid"
    12  )
    13  
    14  var (
    15  	parsePattern = regexp.MustCompile(`(.*):(\d+)`)
    16  )
    17  
    18  func ParseAddresses(name string) (string, string, string, error) {
    19  	matches := parsePattern.FindStringSubmatch(name)
    20  	if matches == nil {
    21  		return "", "", "", fmt.Errorf("Invalid address %s does not match pattern: %v", name, parsePattern)
    22  	}
    23  
    24  	host := matches[1]
    25  	port, _ := strconv.Atoi(matches[2])
    26  
    27  	return fmt.Sprintf("%s:%d", host, port),
    28  		fmt.Sprintf("%s:%d", host, port+1),
    29  		fmt.Sprintf("%s:%d", host, port+2), nil
    30  }
    31  
    32  func UUID() string {
    33  	return uuid.NewV4().String()
    34  }
    35  
    36  func Filter(list []string, check func(string) bool) []string {
    37  	result := make([]string, 0, len(list))
    38  	for _, i := range list {
    39  		if check(i) {
    40  			result = append(result, i)
    41  		}
    42  	}
    43  	return result
    44  }
    45  
    46  func Contains(arr []string, val string) bool {
    47  	for _, a := range arr {
    48  		if a == val {
    49  			return true
    50  		}
    51  	}
    52  	return false
    53  }
    54  
    55  type filteredLoggingHandler struct {
    56  	filteredPaths  map[string]struct{}
    57  	handler        http.Handler
    58  	loggingHandler http.Handler
    59  }
    60  
    61  func FilteredLoggingHandler(filteredPaths map[string]struct{}, writer io.Writer, router http.Handler) http.Handler {
    62  	return filteredLoggingHandler{
    63  		filteredPaths:  filteredPaths,
    64  		handler:        router,
    65  		loggingHandler: handlers.LoggingHandler(writer, router),
    66  	}
    67  }
    68  
    69  func (h filteredLoggingHandler) ServeHTTP(w http.ResponseWriter, req *http.Request) {
    70  	switch req.Method {
    71  	case "GET":
    72  		if _, exists := h.filteredPaths[req.URL.Path]; exists {
    73  			h.handler.ServeHTTP(w, req)
    74  			return
    75  		}
    76  	}
    77  	h.loggingHandler.ServeHTTP(w, req)
    78  }