Exemple #1
0
        private void Refresh_DiskUsages()
        {
            if (RequiresUpdate && !disposed)
            {
                Logger.LogMessage("Begin DiskUsage Refresh...", LogType.Debug);

                List <DiskUsage> temp  = new List <DiskUsage>();
                String           raw   = _client.GetCommandRawResponse("/bin/df -h");
                String[]         lines = raw.Split(new string[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string line in lines)
                {
                    Match match = Regex.Match(line, @"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)%\s+(.+)");
                    if (match.Success)
                    {
                        try
                        {
                            String fileSystem = match.Groups[1].Value;
                            Logger.LogMessage(" - Disk: '" + fileSystem + "'", LogType.Debug);
                            XmlNode node = ParseXMLConfig("nas4free/mounts/mount[devicespecialfile=\"" + fileSystem + "\"]");
                            if (node != null)
                            {
                                Logger.LogMessage("   - Found mount config", LogType.Debug);
                                String  sSize     = match.Groups[2].Value;
                                String  sUsed     = match.Groups[3].Value;
                                String  sFree     = match.Groups[4].Value;
                                String  sUsedPcnt = match.Groups[5].Value;
                                XmlNode innerNode = node.SelectSingleNode("sharename");
                                if (innerNode != null)
                                {
                                    Logger.LogMessage("   - Found sharename node", LogType.Debug);
                                    String sMount = innerNode.InnerText;
                                    if (!string.IsNullOrEmpty(sMount))
                                    {
                                        DiskUsage du = new DiskUsage(sMount);
                                        du.FileSystem = fileSystem;
                                        du.TotalSpace = sSize;
                                        du.UsedSpace  = sUsed;
                                        du.FreeSpace  = sFree;
                                        int iTemp = 0;
                                        int.TryParse(sUsedPcnt, out iTemp);
                                        du.PercentUsed = iTemp;
                                        du.PoolStatus  = String.Empty;
                                        Logger.LogMessage("   - Adding disk" + fileSystem, LogType.Debug);
                                        temp.Add(du);
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Logger.LogMessage("   - Error: " + ex.Message, LogType.Debug);
                        }
                    }
                }

                String zfsRaw = _client.GetCommandRawResponse("/sbin/zpool list -H");
                lines = zfsRaw.Split(new String[] { Environment.NewLine, "\n" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (string line in lines)
                {
                    Match match = Regex.Match(line, @"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\d+)%\s+(\S+)\s+(\S+)\s+(.+)");
                    if (match.Success)
                    {
                        String poolName = match.Groups[1].Value;
                        Logger.LogMessage(" - Pool: '" + poolName + "'", LogType.Debug);
                        XmlNode node = ParseXMLConfig("nas4free/zfs/pools/pool[name=\"" + poolName + "\"]");
                        if (node != null)
                        {
                            try
                            {
                                Logger.LogMessage("   - Found pool config", LogType.Debug);
                                String sSize    = match.Groups[2].Value;
                                String sAlloc   = match.Groups[3].Value;
                                String sFree    = match.Groups[4].Value;
                                String sCap     = match.Groups[5].Value;
                                String sDedup   = match.Groups[6].Value;
                                String sHealth  = match.Groups[7].Value;
                                String sAltRoot = match.Groups[8].Value;
                                String zfsRaw2  = _client.GetCommandRawResponse("/sbin/zfs list -H -o used,available " + poolName);
                                Match  match2   = Regex.Match(zfsRaw2, @"(\S+)\s+(\S+)");
                                if (match2.Success)
                                {
                                    sAlloc = match2.Groups[1].Value;
                                    sFree  = match2.Groups[2].Value;
                                }
                                DiskUsage du = new DiskUsage(poolName);
                                du.FileSystem = poolName;
                                du.TotalSpace = sSize;
                                du.UsedSpace  = sAlloc;
                                du.FreeSpace  = sFree;
                                int iTemp = 0;
                                int.TryParse(sCap, out iTemp);
                                du.PercentUsed = iTemp;
                                du.PoolStatus  = sHealth;
                                Logger.LogMessage("   - Adding pool '" + poolName + "'", LogType.Debug);
                                temp.Add(du);
                            }
                            catch (Exception ex)
                            {
                                Logger.LogMessage("   - Error: " + ex.Message, LogType.Debug);
                            }
                        }
                    }
                    temp = temp.OrderBy(t => t.Name).ToList();
                }
                lock (_diskUsages)
                {
                    _diskUsages = temp;
                    Logger.LogMessage(" - Updated DiskUsage", LogType.Debug);
                }
            }
        }