コード例 #1
0
        private void ListviewFilers_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (listviewFilers.SelectedItem != null)
            {
                ValidateToken();
                NasuniFiler selectedfiler = (NasuniFiler)listviewFilers.SelectedItem;
                ObservableCollection <NasuniCIFS>  cifslist     = new ObservableCollection <NasuniCIFS>();
                ObservableCollection <NasuniLock>  lockslist    = new ObservableCollection <NasuniLock>();
                ObservableCollection <NasuniFiler> filerlist    = new ObservableCollection <NasuniFiler>();
                ObservableCollection <CifsLock>    lockinfolist = new ObservableCollection <CifsLock>();

                Stopwatch stopwatch = new Stopwatch();
                stopwatch.Start();
                filerlist.Add(selectedfiler);
                //Generate expander for filer
                listboxFiler.ItemsSource = filerlist;
                //Generate list of cifsclient
                var client  = new RestClient($"{nmc}/api/v1/filers/{selectedfiler.Serialno}/cifsclients/");
                var request = new RestRequest(Method.GET);
                request.AddHeader("Authorization", authtoken);
                request.AddHeader("cache-control", "no-cache");
                request.AddHeader("accept", "application/json");
                request.AddHeader("content-type", "application/json");
                IRestResponse response  = client.Execute(request);
                dynamic       cifsusers = JsonConvert.DeserializeObject(response.Content);
                foreach (dynamic cifsuser in cifsusers.cifs_clients)
                {
                    NasuniCIFS newcifs = new NasuniCIFS
                    {
                        Share       = cifsuser.share,
                        User        = cifsuser.user,
                        Client      = cifsuser.client,
                        Workstation = cifsuser.client_name
                    };
                    cifslist.Add(newcifs);
                }

                //Generate list of cifslocks
                var lockclient  = new RestClient($"{nmc}/api/v1/filers/{selectedfiler.Serialno}/cifslocks/");
                var lockrequest = new RestRequest(Method.GET);
                lockrequest.AddHeader("Authorization", authtoken);
                lockrequest.AddHeader("cache-control", "no-cache");
                lockrequest.AddHeader("accept", "application/json");
                lockrequest.AddHeader("content-type", "application/json");
                IRestResponse lockresponse = lockclient.Execute(lockrequest);
                dynamic       cifslocks    = JsonConvert.DeserializeObject(lockresponse.Content);
                foreach (dynamic cifslock in cifslocks.cifs_locks)
                {
                    bool         addnewlock  = true;
                    CifsLockInfo newlockinfo = new CifsLockInfo
                    {
                        Client   = cifslock.client,
                        Share    = cifslock.share,
                        Type     = cifslock.type,
                        FilePath = cifslock.file_path
                    };
                    foreach (CifsLock lockcompare in lockinfolist)
                    {
                        if (cifslock.user == lockcompare.Username)
                        {
                            lockcompare.CifsLockList.Add(newlockinfo);
                            addnewlock = false;
                        }
                    }
                    if (addnewlock)
                    {
                        CifsLock newcifslock = new CifsLock
                        {
                            Username = cifslock.user
                        };
                        newcifslock.CifsLockList.Add(newlockinfo);
                        lockinfolist.Add(newcifslock);
                    }
                    NasuniLock newlock = new NasuniLock
                    {
                        Share      = cifslock.share,
                        FilePath   = cifslock.file_path,
                        Type       = cifslock.type,
                        User       = cifslock.user,
                        Client     = cifslock.client,
                        ClientName = cifslock.client_name
                    };
                    lockslist.Add(newlock);
                }
                #region api v1.1 pagination
                //v1.1 api pagination

                /*while (cifsusers.next != null)
                 * {
                 *  Console.WriteLine("Processing 50 users");
                 *  foreach (dynamic cifsuser in cifsusers.items)
                 *  {
                 *      string sharename = GetShareName((String)cifsuser.share_id);
                 *      NasuniCIFS newcifs = new NasuniCIFS
                 *      {
                 *          Share = sharename,
                 *          User = cifsuser.user,
                 *          Client = cifsuser.client,
                 *          Workstation = cifsuser.client_name
                 *      };
                 *      cifslist.Add(newcifs);
                 *  }
                 *  Console.WriteLine("Done Processing, Query Next Page");
                 *  if (cifsusers.next != null)
                 *  {
                 *      client = new RestClient(cifsusers.next.Value);
                 *      request = new RestRequest(Method.GET);
                 *      request.AddHeader("Authorization", authtoken);
                 *      request.AddHeader("cache-control", "no-cache");
                 *      request.AddHeader("accept", "application/json");
                 *      request.AddHeader("content-type", "application/json");
                 *      response = client.Execute(request);
                 *      cifsusers = JsonConvert.DeserializeObject(response.Content);
                 *  }
                 * }
                 * //Check if there is only one page
                 * if(cifsusers.items.Count <= 50 && cifsusers.next == null && cifsusers.previous == null)
                 * {
                 *  Console.WriteLine("Processing Only Page");
                 *  foreach (dynamic cifsuser in cifsusers.items)
                 *  {
                 *      string sharename = GetShareName((String)cifsuser.share_id);
                 *      NasuniCIFS newcifs = new NasuniCIFS
                 *      {
                 *          Share = sharename,
                 *          User = cifsuser.user,
                 *          Client = cifsuser.client,
                 *          Workstation = cifsuser.client_name
                 *      };
                 *      cifslist.Add(newcifs);
                 *  }
                 * }
                 * //Check if there were multiple pages and add the stuff from the last page
                 * if (cifsusers.items.Count > 0 && cifsusers.next == null && cifsusers.previous != null)
                 * {
                 *  Console.WriteLine("Processing Last Page");
                 *  foreach (dynamic cifsuser in cifsusers.items)
                 *  {
                 *      string sharename = GetShareName((String)cifsuser.share_id);
                 *      NasuniCIFS newcifs = new NasuniCIFS
                 *      {
                 *          Share = sharename,
                 *          User = cifsuser.user,
                 *          Client = cifsuser.client,
                 *          Workstation = cifsuser.client_name
                 *      };
                 *      cifslist.Add(newcifs);
                 *  }
                 * }*/
                #endregion

                foreach (NasuniCIFS cifsclient in cifslist)
                {
                    IPAddress clientip = IPAddress.Parse(cifsclient.Client);
                    foreach (KeyValuePair <String, String> subnet in subnetlist)
                    {
                        IPNetwork ipsubnet = IPNetwork.Parse(subnet.Key);
                        if (clientip.IsInSameSubnet(ipsubnet.Network, ipsubnet.Netmask))
                        {
                            cifsclient.ConnectedSite = subnet.Value;
                            break;
                        }
                    }
                }
                stopwatch.Stop();
                TimeSpan ts          = stopwatch.Elapsed;
                string   elapsedTime = String.Format("{0:00}.{1:00}", ts.Seconds, ts.Milliseconds / 10);
                statusbarStatus.Content        = $"{selectedfiler.Name} Loaded in {elapsedTime} Seconds";
                gridCIFS.ItemsSource           = cifslist;
                listboxCifsLocks.ItemsSource   = lockinfolist;
                layoutCifsConnections.IsActive = true;
            }
        }
コード例 #2
0
        private void LoadFilers()
        {
            if (authtoken == null)
            {
                GenerateToken();
            }
            ValidateToken();
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();
            //Generate list of AD Subnets
            try
            {
                subnetlist.Clear();
                adsites.Clear();

                DirectoryContext adcontext = new DirectoryContext(DirectoryContextType.Forest, domain);
                Forest           adforest  = Forest.GetForest(adcontext);
                foreach (ActiveDirectorySite site in adforest.Sites)
                {
                    ADSite newadsite = new ADSite
                    {
                        Sitename = site.Name
                    };
                    foreach (ActiveDirectorySubnet subnet in site.Subnets)
                    {
                        newadsite.Subnets.Add(subnet.Name);
                        subnetlist.Add(subnet.Name, site.Name);
                    }
                    adsites.Add(newadsite);
                }
            }
            catch
            {
                MessageBox.Show($"Please configure domain[{domain}] settings under File -> Settings", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
            }
            nasunifilers.Clear();
            //Generate list of Nasuni Filers
            var client  = new RestClient($"{nmc}/api/v1.1/filers/");
            var request = new RestRequest(Method.GET);

            request.AddHeader("Authorization", authtoken);
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("accept", "application/json");
            request.AddHeader("content-type", "application/json");
            IRestResponse response = client.Execute(request);

            filers = JsonConvert.DeserializeObject(response.Content);
            foreach (dynamic filer in filers.items)
            {
                BasicInformation newinfo = new BasicInformation
                {
                    Build       = filer.build,
                    Description = filer.description,
                    Guid        = filer.guid,
                    MgmtState   = filer.management_state,
                    SerialNo    = filer.serial_number,
                    Timezone    = filer.settings.time.timezone
                };
                CIFSSettings newcifs = new CIFSSettings
                {
                    SMB          = filer.settings.cifs.smb3,
                    VetoFiles    = filer.settings.cifs.veto_files,
                    AioSupport   = filer.settings.cifs.aio_support,
                    SmbEncrypt   = filer.settings.cifs.smb_encrypt,
                    FruitSupport = filer.settings.cifs.fruit_support,
                    DenyAccess   = filer.settings.cifs.deny_access,
                    ProtoLevel   = filer.settings.cifs.proto_level,
                    UnixExt      = filer.settings.cifs.unix_ext,
                    Anonymous    = filer.settings.cifs.restrict_anonymous
                };
                Status newstatus = new Status
                {
                    Offline        = filer.status.offline,
                    Version        = filer.status.osversion,
                    Platform       = filer.status.platform.platform_name,
                    CacheSize      = filer.status.platform.cache_status.size,
                    CacheUsed      = filer.status.platform.cache_status.used,
                    CacheFree      = filer.status.platform.cache_status.free,
                    PercentFree    = filer.status.platform.cache_status.percent_used,
                    CpuCores       = filer.status.platform.cpu.cores,
                    CpuModel       = filer.status.platform.cpu.model,
                    CpuFreq        = filer.status.platform.cpu.frequency,
                    Sockets        = filer.status.platform.cpu.sockets,
                    Memory         = filer.status.platform.memory,
                    UpdateAvail    = filer.status.updates.updates_available,
                    CurrentVersion = filer.status.updates.current_version,
                    NewVersion     = filer.status.updates.new_version,
                    Uptime         = filer.status.uptime
                };
                NasuniFiler newfiler = new NasuniFiler
                {
                    Name        = filer.description,
                    Guid        = filer.guid,
                    Serialno    = filer.serial_number,
                    Build       = filer.build,
                    PercentUsed = Math.Round((Double)filer.status.platform.cache_status.percent_used, 2),
                    Offline     = filer.status.offline,
                    BasicInfo   = newinfo,
                    CifsInfo    = newcifs,
                    FilerStatus = newstatus
                };
                nasunifilers.Add(newfiler);
            }
            stopwatch.Stop();
            TimeSpan ts          = stopwatch.Elapsed;
            string   elapsedTime = String.Format("{0:00}.{1:00}", ts.Seconds, ts.Milliseconds / 10);

            listviewFilers.ItemsSource    = nasunifilers;
            buttonLoadFilers.IsEnabled    = false;
            buttonRefreshFilers.IsEnabled = true;
            tabSearch.IsEnabled           = true;
            if (sitesloaded)
            {
                statusbarStatus.Content = $"Nasuni Filer Refresh Completed in {elapsedTime} Seconds";
            }
            else
            {
                statusbarStatus.Content = $"Nasuni Filer Load Completed in {elapsedTime} Seconds";
                sitesloaded             = true;
            }
        }