Thanks :) .

On Wednesday, 21 December 2016 15:42:55 UTC+5:30, Axel Wagner wrote:
>
> You need to pass the WaitGroup as a pointer. This way, connectionsCount 
> creates a WaitGroup, increments it's counts, passes a copy of it to count 
> and then waits on the original; count, however, only Done()s its copy.
>
> go vet should probably complain about that, as it contains an appropriate 
> marker to not be copied.
>
> On Wed, Dec 21, 2016 at 10:35 AM, DM <subhara...@gmail.com <javascript:>> 
> wrote:
>
>> I am trying write a small golang program which will periodically execute 
>> lsof 
>> -i:<port> to check number of open TCP connections at a port. Code looks 
>> like below:-
>>
>> package main
>>
>> import (
>>     "fmt"
>>     "log"
>>     "os/exec"
>>     "strings"
>>     "sync"
>>     "time"
>> )
>>
>> type Lsof struct {
>>     Command  string
>>     Pid      string
>>     User     string
>>     Fd       string
>>     Type     string
>>     Device   string
>>     SizeOff  string
>>     Node     string
>>     Name     string
>>     TCPState string
>> }
>>
>> //var result = make([]*Lsof, 0)
>> var ports = []int{30001, 30002}
>>
>> func main() {
>>     done := make(chan bool)
>>     ticker := time.NewTicker(5 * time.Millisecond)
>>     go func() {
>>         for t := range ticker.C {
>>             fmt.Println("Tick at", t)
>>             connectionsCount()
>>         }
>>     }()
>>     <-done
>> }
>>
>> func connectionsCount() {
>>     var wg sync.WaitGroup
>>     wg.Add(len(ports))
>>     for _, v := range ports {
>>         go count(v, wg)
>>     }
>>     wg.Wait()
>> }
>>
>> func count(port int, wg sync.WaitGroup) {
>>     defer wg.Done()
>>     var tcpState = make(map[string]int)
>>     out, err := exec.Command("/bin/sh", "-c", fmt.Sprintf("lsof -i:%d", 
>> port)).Output()
>>     if err != nil {
>>         log.Fatal(err)
>>     }
>>     //fmt.Println(string(out))
>>     num := strings.Split(string(out), "\n")
>>     for no, n := range num {
>>         if no == 0 {
>>             continue
>>         }
>>         n = strings.TrimSpace(n)
>>         if len(n) <= 0 {
>>             continue
>>         }
>>         i := 0
>>         temp := strings.Split(n, " ")
>>         cleanedVal := make([]string, 10)
>>         for _, v := range temp {
>>             v = strings.TrimSpace(v)
>>             if len(v) <= 0 {
>>                 continue
>>             }
>>             cleanedVal[i] = v
>>             i++
>>         }
>>         if len(cleanedVal) < 8 {
>>             //log.Println(n)
>>             continue
>>         }
>>         l := new(Lsof)
>>         l.Command = cleanedVal[0]
>>         l.Pid = cleanedVal[1]
>>         l.User = cleanedVal[2]
>>         l.Fd = cleanedVal[3]
>>         l.Type = cleanedVal[4]
>>         l.Device = cleanedVal[5]
>>         l.SizeOff = cleanedVal[6]
>>         l.Node = cleanedVal[7]
>>         l.Name = cleanedVal[8]
>>         if l.Node == "TCP" {
>>             l.TCPState = cleanedVal[9]
>>             count, ok := tcpState[l.TCPState]
>>             if !ok {
>>                 tcpState[l.TCPState] = 1
>>             } else {
>>                 tcpState[l.TCPState] = count + 1
>>             }
>>         }
>>         //fmt.Printf("\n%+v", *l)
>>         //result = append(result, l)
>>     }
>>     fmt.Printf("Port=%d ", port)
>>     for k, v := range tcpState {
>>         fmt.Printf("{TCP State=%s,Value=%d},", k, v)
>>     }
>>     fmt.Println()
>> }
>>
>>
>> But on running the program I am seeing the ticker is not ticking 
>> periodically. It is just ticking once:-
>>
>> Tick at 2016-12-21 14:37:03.847694697 +0530 ISTPort=30002 {TCP 
>> State=(LISTEN),Value=2},Port=30001 {TCP State=(LISTEN),Value=2},
>>
>> Can someone let me know what is going wrong?
>>
>>    - Go Version - 1.7.3
>>
>> -- 
>> You received this message because you are subscribed to the Google Groups 
>> "golang-nuts" group.
>> To unsubscribe from this group and stop receiving emails from it, send an 
>> email to golang-nuts...@googlegroups.com <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to