...

Source file src/github.com/jackc/pgproto3/v2/example/pgfortune/main.go

Documentation: github.com/jackc/pgproto3/v2/example/pgfortune

     1  package main
     2  
     3  import (
     4  	"flag"
     5  	"fmt"
     6  	"log"
     7  	"net"
     8  	"os"
     9  	"os/exec"
    10  )
    11  
    12  var options struct {
    13  	listenAddress   string
    14  	responseCommand string
    15  }
    16  
    17  func main() {
    18  	flag.Usage = func() {
    19  		fmt.Fprintf(os.Stderr, "usage:  %s [options]\n", os.Args[0])
    20  		flag.PrintDefaults()
    21  	}
    22  
    23  	flag.StringVar(&options.listenAddress, "listen", "127.0.0.1:15432", "Listen address")
    24  	flag.StringVar(&options.responseCommand, "response-command", "fortune | cowsay -f elephant", "Command to execute to generate query response")
    25  	flag.Parse()
    26  
    27  	ln, err := net.Listen("tcp", options.listenAddress)
    28  	if err != nil {
    29  		log.Fatal(err)
    30  	}
    31  	log.Println("Listening on", ln.Addr())
    32  
    33  	for {
    34  		conn, err := ln.Accept()
    35  		if err != nil {
    36  			log.Fatal(err)
    37  		}
    38  		log.Println("Accepted connection from", conn.RemoteAddr())
    39  
    40  		b := NewPgFortuneBackend(conn, func() ([]byte, error) {
    41  			return exec.Command("sh", "-c", options.responseCommand).CombinedOutput()
    42  		})
    43  		go func() {
    44  			err := b.Run()
    45  			if err != nil {
    46  				log.Println(err)
    47  			}
    48  			log.Println("Closed connection from", conn.RemoteAddr())
    49  		}()
    50  	}
    51  }
    52  

View as plain text