func (this *ControlPlaneDao) GetRunningServicesForHost(hostID string, services *[]dao.RunningService) error { // we initialize the data container to something here in case it has not been initialized yet *services = make([]dao.RunningService, 0) myHost, err := this.facade.GetHost(datastore.Get(), hostID) if err != nil { glog.Errorf("Unable to get host %v: %v", hostID, err) return err } else if myHost == nil { return nil } poolBasedConn, err := zzk.GetLocalConnection(zzk.GeneratePoolPath(myHost.PoolID)) if err != nil { glog.Errorf("Error in getting a connection based on pool %v: %v", myHost.PoolID, err) return err } *services, err = zkservice.LoadRunningServicesByHost(poolBasedConn, hostID) if err != nil { glog.Errorf("zkservice.LoadRunningServicesByHost (conn: %+v host: %v) failed: %v", poolBasedConn, hostID, err) return err } return nil }
// Updates the default registry. func (sr StatsReporter) updateStats() { // Stats for host. sr.updateHostStats() // Stats for the containers. var running []dao.RunningService running, err := zkservice.LoadRunningServicesByHost(sr.conn, sr.hostID) if err != nil { glog.Errorf("updateStats: zkservice.LoadRunningServicesByHost (conn: %+v hostID: %v) failed: %v", sr.conn, sr.hostID, err) } for _, rs := range running { if rs.DockerID != "" { containerRegistry := sr.getOrCreateContainerRegistry(rs.ServiceID, rs.InstanceID) if cpuacctStat, err := cgroup.ReadCpuacctStat(cgroup.GetCgroupDockerStatsFilePath(rs.DockerID, cgroup.Cpuacct)); err != nil { glog.V(4).Infof("Couldn't read CpuacctStat:", err) } else { metrics.GetOrRegisterGauge("cgroup.cpuacct.system", containerRegistry).Update(cpuacctStat.System) metrics.GetOrRegisterGauge("cgroup.cpuacct.user", containerRegistry).Update(cpuacctStat.User) } if memoryStat, err := cgroup.ReadMemoryStat(cgroup.GetCgroupDockerStatsFilePath(rs.DockerID, cgroup.Memory)); err != nil { glog.V(4).Infof("Couldn't read MemoryStat:", err) } else { metrics.GetOrRegisterGauge("cgroup.memory.pgmajfault", containerRegistry).Update(memoryStat.Pgfault) metrics.GetOrRegisterGauge("cgroup.memory.totalrss", containerRegistry).Update(memoryStat.TotalRss) metrics.GetOrRegisterGauge("cgroup.memory.cache", containerRegistry).Update(memoryStat.Cache) } } else { glog.V(4).Infof("Skipping stats update for %s (%s), no container ID exists yet", rs.Name, rs.ServiceID) } } // Clean out old container registries sr.removeStaleRegistries(&running) }
func (l *VirtualIPListener) stopInstances(ip string) { glog.Infof("Stopping service instances using ip %s on host %s", ip, l.hostID) rss, err := zkservice.LoadRunningServicesByHost(l.conn, l.hostID) if err != nil { glog.Errorf("Could not load running instances on host %s: %s", l.hostID, err) return } for _, rs := range rss { if rs.IPAddress == ip { if err := zkservice.StopServiceInstance(l.conn, l.hostID, rs.ID); err != nil { glog.Warningf("Could not stop service instance %s on host %s: %s", rs.ID, l.hostID, err) } } } }