initial work on publish

This commit is contained in:
Jimmy Zelinskie 2013-08-04 23:01:25 -04:00
parent a6d04f6790
commit dcc2621ec3
5 changed files with 61 additions and 5 deletions

View file

@ -47,6 +47,7 @@ type Storage struct {
// Config represents a configuration for a server.Server.
type Config struct {
Addr string `json:"addr"`
PubAddr string `json:"pub_addr"`
Storage Storage `json:"storage"`
Private bool `json:"private"`

View file

@ -16,6 +16,7 @@ var exampleJson = `{
"network": "tcp",
"addr": ":34000",
"pub_addr": "tcp://*:34001",
"storage": {
"driver": "redis",
"addr": "127.0.0.1:6379",

28
server/publish.go Normal file
View file

@ -0,0 +1,28 @@
// Copyright 2013 The Chihaya Authors. All rights reserved.
// Use of this source code is governed by the BSD 2-Clause license,
// which can be found in the LICENSE file.
package server
import (
zmq "github.com/alecthomas/gozmq"
)
func (s *Server) publish() {
context, err := zmq.NewContext()
if err != nil {
panic(err)
}
defer context.Close()
socket, err := context.NewSocket(zmq.PUB)
if err != nil {
panic(err)
}
defer socket.Close()
socket.Bind(s.conf.PubAddr)
for msg := range s.pubChan {
socket.Send([]byte(msg), 0)
}
}

View file

@ -34,6 +34,8 @@ type Server struct {
waitgroup sync.WaitGroup
pubChan chan string
http.Server
}
@ -46,6 +48,7 @@ func New(conf *config.Config) (*Server, error) {
s := &Server{
conf: conf,
dbConnPool: pool,
pubChan: make(chan string),
Server: http.Server{
Addr: conf.Addr,
ReadTimeout: conf.ReadTimeout.Duration,
@ -66,6 +69,7 @@ func (s *Server) ListenAndServe() error {
s.startTime = time.Now()
go s.updateRPM()
go s.publish()
s.Serve(s.listener)
s.waitgroup.Wait()
@ -79,6 +83,7 @@ func (s *Server) Stop() error {
if err != nil {
return err
}
close(s.pubChan)
return s.listener.Close()
}

View file

@ -3,33 +3,54 @@ exec { 'echo this works': }
group { 'puppet': ensure => 'present' }
exec { 'chown -R vagrant:vagrant /home/vagrant/': }
exec { 'chown -R vagrant:vagrant /home/vagrant/':
}
exec { 'apt-get update':
command => '/usr/bin/apt-get update',
}
exec { 'add-apt-repository ppa:chris-lea/zeromq && apt-get update':
require => Package['python-software-properties'],
alias => 'zmq_repo',
creates => '/etc/apt/sources.list.d/chris-lea-zeromq-precise.list',
}
exec { 'add-apt-repository ppa:duh/golang && apt-get update':
alias => 'go_repo',
creates => '/etc/apt/sources.list.d/gophers-go-precise.list',
require => Package['python-software-properties'],
}
package { 'python-software-properties':
ensure => present,
package { 'pkg-config':
require => Exec['apt-get update'],
ensure => present,
}
package { 'libzmq-dev':
require => [
Exec['zmq_repo'],
Package['pkg-config'],
],
ensure => present,
}
package { 'python-software-properties':
require => Exec['apt-get update'],
ensure => present,
}
package { 'git':
ensure => present,
require => Exec['apt-get update'],
ensure => present,
}
package { 'golang':
ensure => present,
require => Exec['go_repo'],
ensure => present,
}
exec { 'echo "export GOPATH=/home/vagrant/chihaya" > /etc/profile.d/gopath.sh':
alias => 'go_path',
creates => '/etc/profile.d/gopath.sh',
}