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; } }
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; } }