Skip to content

Instantly share code, notes, and snippets.

@kalbasit
Last active April 4, 2017 18:05
Show Gist options
  • Select an option

  • Save kalbasit/2007e2a6ad835d951a1b14e7d5736df3 to your computer and use it in GitHub Desktop.

Select an option

Save kalbasit/2007e2a6ad835d951a1b14e7d5736df3 to your computer and use it in GitHub Desktop.
package main
import (
"bytes"
"flag"
"io"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"time"
)
var (
port string
filename string
f io.WriteCloser
logChan chan string
buffer bytes.Buffer
)
func init() {
flag.StringVar(&port, "port", "8999", "The port of the server")
flag.StringVar(&filename, "filename", "log.txt", "The filename to write to")
}
func openFile() {
var err error
f, err = os.Create(filename)
if err != nil {
log.Printf("error creating a new file %q: %s", filename, err)
}
}
func main() {
flag.Parse()
if port == "" || filename == "" {
flag.Usage()
os.Exit(254)
}
// hooku the signal
sigC := make(chan os.Signal, 1)
signal.Notify(sigC, syscall.SIGINT, syscall.SIGTERM, os.Interrupt)
// initialize the channel
logChan = make(chan string, 100000)
// start the gorouting for the background processing of the messages
go func() {
t := time.NewTicker(time.Second)
for {
select {
case msg := <-logChan:
if _, err := buffer.Write([]byte(msg)); err != nil {
log.Printf("error writing bytes to the buffer: %s", err)
}
case <-t.C:
if f == nil {
continue
}
// write the buffer to file
if _, err := f.Write(buffer.Bytes()); err != nil {
log.Printf("error writing the buffer to disk")
}
// reset the buffer
buffer.Reset()
// flush the file to disk
if fh, ok := f.(*os.File); ok {
if err := fh.Sync(); err != nil {
log.Printf("error flushing the file: %s", err)
}
}
case <-sigC:
if f != nil {
f.Close()
f = nil
}
os.Exit(0)
}
}
}()
http.HandleFunc("/clear.img", func(w http.ResponseWriter, r *http.Request) {
if f != nil {
f.Close()
f = nil
}
buffer.Reset()
openFile()
})
http.HandleFunc("/log.img", func(w http.ResponseWriter, r *http.Request) {
if f == nil {
openFile()
}
logChan <- r.URL.Query().Get("type") + " " + r.URL.Query().Get("fn") + " " + r.URL.Query().Get("date") + "\n"
})
log.Printf("starting the server on port :%s and writing to the file %q", port, filename)
log.Fatal(http.ListenAndServeTLS(":"+port, "server.pem", "server.key", nil))
}
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA8NUPneZLyt+YvDx19u0ngzSgPbn0penYJ5JyNMMr4Bnnv451
zR9au+NqBAKDuF0WJBnYUHnhU2LjMWiyaVfBytQsm7/mLiMW0zjEFcK9Dnv2Rnfs
PesRCS0LqgSxJXn05WgimKRO0SIsUL26KIKzQ/qka0MoMjzV2SZVrrMngSyts4au
fXdtL4vL7NKPBVLo4DBMzwacOFM+gCRqXk7rxUpEV41nK332LM5jOqn9qmrjEMKU
N3bMD5Q4qKQkrhSpF4q7/MvpLdWzTFNMdV74kQJ9+RK5YQXuy5UAL1Qvsoy/nke4
GuKsVsgZNNZny1VyHVzCYxskKArahlWZNGS9nwIDAQABAoIBAQC2QMb8u5eIBAZW
DXtITtikFmNd0ygtlvYZnF4JR9ogUfproKfNf3juz38fYbfFAc0LrPNik5nNvPwq
HA1IYz0o/cB0bZkIOU3AsyjRPvpLx8vsMDz77rSJuSkmlT5qGg0WvuPPmCh9Y9sd
jzceCSsYuslK0xvMSPWcy8Hz32h5+5n2yS/vTb/doFSX6AeurSa+aPMW6RQppyE7
hFHYKykHuulKlo1xC9frRMVGAc1/BonOFJ/ODL5HZCk99v2YNMNBKG4rilR/92mm
+IN4bp1abEdkAn61Mu5x5KG3Cda1dB5dauQiCZPsb/zfZ19YPHY8CVYgOgMD/cF5
xCm01aghAoGBAPlf3tNCGBtdlT4xoT+y1jp5d8VZ8QagqdlERkKSu/rykEIejR3v
GQawHW49MLQ0eFHGGdeFAtV5IqsxcEKQMCsEp7mYpHxFXKpyzXjsnwRXpuR/5WTR
jkuo1IjKE6i/NdPbtfP6TNODK3rMcvAPr8cmsQSUU7ofhUBq4MtjGGS7AoGBAPc7
FyD0JxpDRZlQGCS8B4DQuSQLKkxC7kdtRIPwgYd9IAo/HQa8DAZ4uTaCQh8G+H0o
ZLzED9hW4Uo6hTvp+WkWMR6oKX1p6H+ZEqVNEdnKb0Q94+q0qhmVE/wdcdfpED9v
Bp6BBJDXY/+Yc/3bV0zk4CHFh0n/7cc+YdpYVO5tAoGAao3XZUdxi4fiNE/6iYA9
34B1d+MlhOJzkL2Gk/2kyuaIU2hAfhDjDaOE/8yvmeBtpOtTsW5JNrPq52FZiWeY
3VjA3iHl7p+op8AkIc5hZ/aX/jzT5M9R0OxT3BsUaV9CfcL8rUI/P4Vlt7PSTNc3
EY5rxvwmBnpfcpX4dY9jJe8CgYEAuBTCUuIX32EpiE7vuyJZv9spjyHVG7VWL863
DjpcZ6KN4bM+jI4lsgffeCuiyfFpwd76quadGasO0jMikwrSjyFb74SsZ9ocqC00
ieoJmY02LaybcF2Wrbenirft1SKO23xyhEByQtptdZlw/Bp+NR3RmLO32Sx7Qjg7
qdTNYD0CgYEAvVNVfQMLKHFE8rBg90rpyQJlF5VlXw0O4rSyStxxTaRFTpvUlLtw
GGtVS75O57WdpDdN37dXWCEVbOm2+EUy7L0wPp3TjbBWPH4sO51s4/WggvYsI19U
k65ZENrGfJO8M6OtYwaHIsGr1DCGvTB+nLsuU/ZTSu7msBeKCFcB9Z8=
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIIDcTCCAlmgAwIBAgIJAIRXQ0TefudlMA0GCSqGSIb3DQEBCwUAME8xCzAJBgNV
BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRIwEAYDVQQHDAlQYWxvIEFsdG8x
FzAVBgNVBAMMDmxvY2FsaG9zdDo4MDgwMB4XDTE2MDkyMzE4NDkwNloXDTI2MDky
MTE4NDkwNlowTzELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExEjAQ
BgNVBAcMCVBhbG8gQWx0bzEXMBUGA1UEAwwObG9jYWxob3N0OjgwODAwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDw1Q+d5kvK35i8PHX27SeDNKA9ufSl
6dgnknI0wyvgGee/jnXNH1q742oEAoO4XRYkGdhQeeFTYuMxaLJpV8HK1Cybv+Yu
IxbTOMQVwr0Oe/ZGd+w96xEJLQuqBLElefTlaCKYpE7RIixQvboogrND+qRrQygy
PNXZJlWusyeBLK2zhq59d20vi8vs0o8FUujgMEzPBpw4Uz6AJGpeTuvFSkRXjWcr
ffYszmM6qf2qauMQwpQ3dswPlDiopCSuFKkXirv8y+kt1bNMU0x1XviRAn35Erlh
Be7LlQAvVC+yjL+eR7ga4qxWyBk01mfLVXIdXMJjGyQoCtqGVZk0ZL2fAgMBAAGj
UDBOMB0GA1UdDgQWBBQkHPaztjmJk73sSr0yppdGArpKgDAfBgNVHSMEGDAWgBQk
HPaztjmJk73sSr0yppdGArpKgDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBCwUA
A4IBAQDM/eTF214a4T1Zszq4RcPLDTzMua4wet7bN93ml6HnVm9cpmgtxV37AP1M
BHc73O9bC7YuNZQMxyS4YUjJ150Ffs+5rPvMhMjCExiQ1eA4baKTQdTPw2x+tMat
nsiduPKq/jw1hm6iMPXiBIZdQ2FzRUw/TfeEv4QidiI1jQ+25OsGQJpp3Ffzztf/
RIvqi7pM0HYV8pdYkzxsA4spJoVjcf3Axt19UXi7Gxorb1AFXlq1KFikCwVr/K2B
448X6Fe02EhqAZGNk9MbacBndF5glMcFuO+gAxDTW/UMy97mPtw5IdnHPLZXGde4
z1ws4KwYY6tUVIxaWBM66x8uuto1
-----END CERTIFICATE-----
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment