github.com/Kong/go-pdk@v0.11.0/server/os.go (about)

     1  package server
     2  
     3  import (
     4  	"flag"
     5  	"log"
     6  	"net"
     7  	"os"
     8  	"path"
     9  
    10  	"github.com/ugorji/go/codec"
    11  )
    12  
    13  var (
    14  	kongPrefix = flag.String("kong-prefix", "/usr/local/kong", "Kong prefix path (specified by the -p argument commonly used in the kong cli)")
    15  	dump       = flag.Bool("dump", false, "Dump info about plugins")
    16  	help       = flag.Bool("help", false, "Show usage info")
    17  )
    18  
    19  func parseCli() {
    20  	flag.Parse()
    21  
    22  	if *help {
    23  		flag.Usage()
    24  		os.Exit(2)
    25  	}
    26  }
    27  
    28  func getName() (name string, err error) {
    29  	execPath, err := os.Executable()
    30  	if err != nil {
    31  		return
    32  	}
    33  
    34  	name = path.Base(execPath)
    35  	return
    36  }
    37  
    38  func getSocketPath() (pth string, err error) {
    39  	name, err := getName()
    40  	if err != nil {
    41  		return
    42  	}
    43  
    44  	pth = path.Join(*kongPrefix, name+".socket")
    45  	return
    46  }
    47  
    48  func openSocket() (listener net.Listener, err error) {
    49  	socketPath, err := getSocketPath()
    50  	if err != nil {
    51  		return
    52  	}
    53  
    54  	err = os.Remove(socketPath)
    55  	if err != nil && !os.IsNotExist(err) {
    56  		log.Printf(`removing "%s": %s`, socketPath, err)
    57  		return
    58  	}
    59  
    60  	listener, err = net.Listen("unix", socketPath)
    61  	if err != nil {
    62  		log.Printf(`listen("%s"): %s`, socketPath, err)
    63  		return
    64  	}
    65  
    66  	log.Printf("Listening on socket: %s", socketPath)
    67  	return
    68  }
    69  
    70  type serverInfo struct {
    71  	Protocol   string
    72  	SocketPath string
    73  	Plugins    []pluginInfo
    74  }
    75  
    76  func dumpInfo(rh *rpcHandler) {
    77  	info, err := rh.getInfo()
    78  	if err != nil {
    79  		log.Printf("getting plugin info: %s", err)
    80  		return
    81  	}
    82  
    83  	socketPath, err := getSocketPath()
    84  	if err != nil {
    85  		log.Printf("getting Socket path: %s", err)
    86  		return
    87  	}
    88  
    89  	var handle codec.JsonHandle
    90  	enc := codec.NewEncoder(os.Stdout, &handle)
    91  	err = enc.Encode(serverInfo{
    92  		Protocol:   "ProtoBuf:1",
    93  		SocketPath: socketPath,
    94  		Plugins:    []pluginInfo{info},
    95  	})
    96  	if err != nil {
    97  		log.Printf("encoding plugin info: %s", err)
    98  	}
    99  	os.Stdout.WriteString("\n")
   100  }
   101