예제 #1
0
        private string get_DiskUsageInfo()
        {
            StringBuilder sb = new StringBuilder();

            KeyValuePair <string, string>[] dirs = new KeyValuePair <string, string>[]
            {
                new KeyValuePair <string, string>("Thumbnails", Program.thumb_save_dir),
                new KeyValuePair <string, string>("Full files", Program.file_save_dir),
                new KeyValuePair <string, string>("API Cached files", Program.api_cache_dir),
                new KeyValuePair <string, string>("Post files", Program.post_files_dir),
                // new KeyValuePair<string, string>("Temporary files", Program.temp_files_dir),
            };

            foreach (KeyValuePair <string, string> a in dirs.OrderBy(x => x.Key))
            {
                DirectoryStatsEntry ds = FileSystemStats.GetDirStats(a.Value);

                if (ds != null)
                {
                    sb.Append("<tr>");
                    sb.AppendFormat("<td>{0}</td>", ds.FileCount);
                    sb.AppendFormat("<td>{0}</td>", a.Key);
                    sb.AppendFormat("<td>{0}</td>", Program.format_size_string(ds.TotalSize));
                    sb.AppendFormat("<td>{0}</td>", Program.format_size_string(ds.AverageFileSize));
                    sb.AppendFormat("<td>{0}</td>", Program.format_size_string(ds.LargestFile));
                    sb.AppendFormat("<td>{0}</td>", Program.format_size_string(ds.SmallestFile));
                    sb.Append("</tr>");
                }
            }

            return(sb.ToString());
        }
예제 #2
0
 public static string GetStatsReportLine(FileSystemStats stats)
 {
     return(PadIntToLength(stats.FilesRead, 12) + "  " +
            PadIntToLength(stats.FilesWritten, 12) + "  " +
            PadIntToLength(stats.BytesRead, 12) + "  " +
            PadIntToLength(stats.BytesWritten, 12));
 }
 public static void AssertZeroStats(FileSystemStats stats)
 {
     Assert.IsNotNull(stats);
     Assert.AreEqual(0, stats.FilesRead);
     Assert.AreEqual(0, stats.FilesWritten);
     Assert.AreEqual(0, stats.BytesRead);
     Assert.AreEqual(0, stats.BytesWritten);
 }
 public static FileSystemStats CopyStats(FileSystemStats stats)
 {
     return(new FileSystemStats()
     {
         FilesRead = stats.FilesRead,
         FilesWritten = stats.FilesWritten,
         BytesRead = stats.BytesRead,
         BytesWritten = stats.BytesWritten
     });
 }
예제 #5
0
        //FsctlAllowExtendedDasdIo
        //FsctlCreateOrGetObjectId
        //FsctlDeleteObjectId
        //FsctlDeleteReparsePoint
        //FsctlDismountVolume
        //FsctlDumpPropertyData
        //FsctlEnableUpgrade
        //FsctlEncryptionFsctlIo

        //FsctlExtendVolume

        /// <summary><see cref="http://msdn.microsoft.com/en-us/library/windows/desktop/aa364565(v=vs.85).aspx"/></summary>
        public FileSystemStats[] FileSystemGetStatistics()
        {
            byte[] data = DeviceIoControlHelper.InvokeIoControlUnknownSize(Handle, IOControlCode.FsctlFileSystemGetStatistics, 512);

            FileSystemStats[] res;

            using (UnmanagedMemory mem = new UnmanagedMemory(data))
            {
                IntPtr currentDataPtr = mem;

                FILESYSTEM_STATISTICS firstStats = (FILESYSTEM_STATISTICS)Marshal.PtrToStructure(currentDataPtr, typeof(FILESYSTEM_STATISTICS));

                int fsStatsSize = Marshal.SizeOf(typeof(FILESYSTEM_STATISTICS));

                int elementSize = (int)firstStats.SizeOfCompleteStructure;
                int procCount   = data.Length / elementSize;

                res = new FileSystemStats[procCount];

                for (int i = 0; i < procCount; i++)
                {
                    res[i]       = new FileSystemStats();
                    res[i].Stats = (FILESYSTEM_STATISTICS)Marshal.PtrToStructure(currentDataPtr, typeof(FILESYSTEM_STATISTICS));

                    switch (res[i].Stats.FileSystemType)
                    {
                    case FILESYSTEM_STATISTICS_TYPE.FILESYSTEM_STATISTICS_TYPE_NTFS:
                        NTFS_STATISTICS ntfsStats = (NTFS_STATISTICS)Marshal.PtrToStructure(currentDataPtr + fsStatsSize, typeof(NTFS_STATISTICS));

                        res[i].FSStats = ntfsStats;

                        break;

                    case FILESYSTEM_STATISTICS_TYPE.FILESYSTEM_STATISTICS_TYPE_FAT:
                        FAT_STATISTICS fatStats = (FAT_STATISTICS)Marshal.PtrToStructure(currentDataPtr + fsStatsSize, typeof(FAT_STATISTICS));

                        res[i].FSStats = fatStats;
                        break;

                    case FILESYSTEM_STATISTICS_TYPE.FILESYSTEM_STATISTICS_TYPE_EXFAT:
                        EXFAT_STATISTICS exFatStats = (EXFAT_STATISTICS)Marshal.PtrToStructure(currentDataPtr + fsStatsSize, typeof(EXFAT_STATISTICS));

                        res[i].FSStats = exFatStats;
                        break;

                    default:
                        throw new ArgumentOutOfRangeException();
                    }

                    currentDataPtr += elementSize;
                }
            }

            return(res);
        }
예제 #6
0
        public FileSystemStats GetFileSystemStats()
        {
            var fsStats = new FileSystemStats
            {
                Name         = Name,
                Metrics      = CreateMetrics(),
                ActiveSyncs  = SynchronizationTask.Queue.Active.ToList(),
                PendingSyncs = SynchronizationTask.Queue.Pending.ToList(),
            };

            Storage.Batch(accessor => { fsStats.FileCount = accessor.GetFileCount(); });
            return(fsStats);
        }
예제 #7
0
        private List <FileSystemData> GetFileSystemsData(IEnumerable <RavenJToken> fileSystems)
        {
            return(fileSystems
                   .Select(fileSystem =>
            {
                var bundles = new string[] { };
                var settings = fileSystem.Value <RavenJObject>("Settings");
                if (settings != null)
                {
                    var activeBundles = settings.Value <string>("Raven/ActiveBundles");
                    if (activeBundles != null)
                    {
                        bundles = activeBundles.Split(';');
                    }
                }

                var fsName = fileSystem.Value <RavenJObject>("@metadata").Value <string>("@id").Replace(Constants.FileSystem.Prefix, string.Empty);
                var isFileSystemLoaded = FileSystemsLandlord.IsFileSystemLoaded(fsName);
                FileSystemStats stats = null;
                if (isFileSystemLoaded)
                {
                    try
                    {
                        var fs = FileSystemsLandlord.GetResourceInternal(fsName).Result;
                        if (fs != null)
                        {
                            stats = fs.GetFileSystemStats();
                        }
                    }
                    catch (Exception)
                    {
                        //the file system is shutting down or locked
                        //we can ignore this
                    }
                }

                return new FileSystemData
                {
                    Name = fsName,
                    Disabled = fileSystem.Value <bool>("Disabled"),
                    Bundles = bundles,
                    IsAdminCurrentTenant = true,
                    IsLoaded = isFileSystemLoaded,
                    Stats = stats
                };
            }).ToList());
        }
		protected void Assert(FileSystemStats fileSystem)
		{
			fileSystem.Should().NotBeNull();
			//fileSystem.Timestamp.Should().BeGreaterThan(0);
			fileSystem.Total.Should().NotBeNull();
			//fileSystem.Total.AvailableInBytes.Should().BeGreaterThan(0);
			//fileSystem.Total.FreeInBytes.Should().BeGreaterThan(0);
			//fileSystem.Total.TotalInBytes.Should().BeGreaterThan(0);

			fileSystem.Data.Should().NotBeEmpty();
			var path = fileSystem.Data.First();
			//path.AvailableInBytes.Should().BeGreaterThan(0);
			//path.FreeInBytes.Should().BeGreaterThan(0);
			//path.TotalInBytes.Should().BeGreaterThan(0);
			path.Mount.Should().NotBeNullOrWhiteSpace();
			path.Path.Should().NotBeNullOrWhiteSpace();
			path.Type.Should().NotBeNullOrWhiteSpace();
		}
예제 #9
0
        public HttpResponseMessage Get()
        {
            var count = 0;

            Storage.Batch(accessor =>
            {
                count = accessor.GetFileCount();
            });

            var stats = new FileSystemStats
            {
                Name         = FileSystemName,
                FileCount    = count,
                Metrics      = FileSystem.CreateMetrics(),
                ActiveSyncs  = FileSystem.SynchronizationTask.Queue.Active.ToList(),
                PendingSyncs = FileSystem.SynchronizationTask.Queue.Pending.ToList()
            };

            return(this.GetMessageWithObject(stats).WithNoCache());
        }
예제 #10
0
        public Task <FileSystemStats[]> GetStats()
        {
            var count = 0;

            filesystem.Storage.Batch(accessor =>
            {
                count = accessor.GetFileCount();
            });

            var stats = new FileSystemStats
            {
                Name         = filesystem.Name,
                FileCount    = count,
                Metrics      = filesystem.CreateMetrics(),
                ActiveSyncs  = filesystem.SynchronizationTask.Queue.Active.ToList(),
                PendingSyncs = filesystem.SynchronizationTask.Queue.Pending.ToList()
            };

            return(new CompletedTask <FileSystemStats[]>(new [] { stats }));
        }
예제 #11
0
        public override bool Process(HttpServer.IHttpRequest request, HttpServer.IHttpResponse response, HttpServer.Sessions.IHttpSession session)
        {
            string command = request.UriPath;

            if (command == "/settings")
            {
                StringBuilder page = new StringBuilder(Properties.Resources.settings_page);

                //-------------------- General Settings --------------------------

                if (Settings.AutoStartManuallyAddedThreads)
                {
                    page.Replace("{gs0c}", Checked);
                }
                else
                {
                    page.Replace("{gs0c}", "");
                }

                if (Settings.ThumbnailOnly)
                {
                    page.Replace("{gs1c}", Checked);
                }
                else
                {
                    page.Replace("{gs1c}", "");
                }

                if (Settings.EnableFileStats)
                {
                    page.Replace("{gs2c}", Checked);
                }
                else
                {
                    page.Replace("{gs2c}", "");
                }

                if (Settings.UseHttps)
                {
                    page.Replace("{gs3c}", Checked);
                }
                else
                {
                    page.Replace("{gs3c}", "");
                }

                if (Settings.RemoveThreadsWhenTheyEnterArchivedState)
                {
                    page.Replace("{gs4c}", Checked);
                }
                else
                {
                    page.Replace("{gs4c}", "");
                }

                if (Settings.SaveBannedFileThumbnail)
                {
                    page.Replace("{gs5c}", Checked);
                }
                else
                {
                    page.Replace("{gs5c}", "");
                }

                if (Settings.CacheAPIFilesInMemory)
                {
                    page.Replace("{gs6c}", Checked);
                }
                else
                {
                    page.Replace("{gs6c}", "");
                }


                //-------------------- Security Settings --------------------------

                if (Settings.EnableAuthentication)
                {
                    page.Replace("{ss0c}", Checked);
                }
                else
                {
                    page.Replace("{ss0c}", "");
                }

                if (Settings.AllowGuestAccess)
                {
                    page.Replace("{ss1c}", Checked);
                }
                else
                {
                    page.Replace("{ss1c}", "");
                }

                page.Replace("{bauser}", string.IsNullOrEmpty(Settings.AuthUsername) ? "" : Settings.AuthUsername);

                page.Replace("{bapass}", string.IsNullOrEmpty(Settings.AuthPassword) ? "" : Settings.AuthPassword);

                //-------------------- FFMPEG Settings --------------------------

                page.Replace("{ffpath}", Program.ffmpeg_path);


                if (Settings.ConvertGifsToWebm)
                {
                    page.Replace("{ff0c}", Checked);
                }
                else
                {
                    page.Replace("{ff0c}", "");
                }

                if (Settings.ConvertWebmToMp4)
                {
                    page.Replace("{ff1c}", Checked);
                }
                else
                {
                    page.Replace("{ff1c}", "");
                }

                if (Settings.Convert_Webmgif_To_Target)
                {
                    page.Replace("{ff2c}", Checked);
                }
                else
                {
                    page.Replace("{ff2c}", "");
                }


                if (Settings.Convert_Webmgif_Target == Settings.X_Target.GIF)
                {
                    page.Replace("{ff2s1o1c}", Selected);
                    page.Replace("{ff2s1o2c}", "");
                }
                else
                {
                    page.Replace("{ff2s1o1c}", "");
                    page.Replace("{ff2s1o2c}", Selected);
                }

                if (Settings.Convert_Webmgif_only_devices)
                {
                    page.Replace("{ff2s2o1c}", Selected);
                    page.Replace("{ff2s2o2c}", "");
                }
                else
                {
                    page.Replace("{ff2s2o1c}", "");
                    page.Replace("{ff2s2o2c}", Selected);
                }

                //-------------------- File Queue Settings --------------------------

                if (Settings.ListThumbsInQueue)
                {
                    page.Replace("{fq0c}", Checked);
                }
                else
                {
                    page.Replace("{fq0c}", "");
                }


                /*
                 * if (Settings.PrioritizeBumpLimit)
                 * {
                 *  page.Replace("{fq1c}", Checked);
                 * }
                 * else
                 * {
                 *  page.Replace("{fq1c}", "");
                 * }
                 *
                 * switch (Settings.FilePrioritizeMode)
                 * {
                 *  case Settings.FilePrioritizeModeEnum.BoardSpeed:
                 *      page.Replace("{fq2s1o1c}", "");
                 *      page.Replace("{fq2s1o2c}", "");
                 *      page.Replace("{fq2s1o3c}", Selected);
                 *      break;
                 *  case Settings.FilePrioritizeModeEnum.LargerFirst:
                 *      page.Replace("{fq2s1o1c}", "");
                 *      page.Replace("{fq2s1o2c}", Selected);
                 *      page.Replace("{fq2s1o3c}", "");
                 *      break;
                 *  case Settings.FilePrioritizeModeEnum.SmallerFirst:
                 *      page.Replace("{fq2s1o1c}", Selected);
                 *      page.Replace("{fq2s1o2c}", "");
                 *      page.Replace("{fq2s1o3c}", "");
                 *      break;
                 *  default:
                 *      break;
                 * }
                 */

                if (Settings.AutoRemoveCompleteFiles)
                {
                    page.Replace("{fq3c}", Checked);
                }
                else
                {
                    page.Replace("{fq3c}", "");
                }

                response.Status      = System.Net.HttpStatusCode.OK;
                response.ContentType = "text/html";
                byte[] data = Encoding.UTF8.GetBytes(page.ToString());
                response.ContentLength = data.Length;
                response.SendHeaders();
                response.SendBody(data);

                return(true);
            }

            if (command.StartsWith("/settings/"))
            {
                // -------------- General Settings ------------
                Settings.AutoStartManuallyAddedThreads = request.QueryString["gs0"].Value == "1";
                Settings.ThumbnailOnly   = request.QueryString["gs1"].Value == "1";
                Settings.EnableFileStats = request.QueryString["gs2"].Value == "1";
                Settings.UseHttps        = request.QueryString["gs3"].Value == "1";
                Settings.RemoveThreadsWhenTheyEnterArchivedState = request.QueryString["gs4"].Value == "1";
                Settings.SaveBannedFileThumbnail = request.QueryString["gs5"].Value == "1";
                Settings.CacheAPIFilesInMemory   = request.QueryString["gs6"].Value == "1";

                if (Settings.EnableFileStats)
                {
                    FileSystemStats.Init();
                }


                // -------------- Security Settings ------------
                Settings.EnableAuthentication = request.QueryString["ss0"].Value == "1";
                Settings.AllowGuestAccess     = request.QueryString["ss1"].Value == "1";
                Settings.AuthUsername         = request.QueryString["ba_user"].Value;
                Settings.AuthPassword         = request.QueryString["ba_pass"].Value;

                // -------------- FFMPEG Settings ------------

                Settings.ConvertGifsToWebm = request.QueryString["ff0"].Value == "1";

                Settings.ConvertWebmToMp4          = request.QueryString["ff1"].Value == "1";
                Settings.Convert_Webmgif_To_Target = request.QueryString["ff2"].Value == "1";

                if (request.QueryString["ff2s1"].Value == "gif")
                {
                    Settings.Convert_Webmgif_Target = Settings.X_Target.GIF;
                }
                else
                {
                    Settings.Convert_Webmgif_Target = Settings.X_Target.MP4;
                }


                Settings.Convert_Webmgif_only_devices = request.QueryString["ff2s2"].Value == "ff2s2o1";


                // -------------- File Queue Settings ------------


                Settings.ListThumbsInQueue = request.QueryString["fq0"].Value == "1";

                /*
                 * Settings.PrioritizeBumpLimit = request.QueryString["fq1"].Value == "1";
                 *
                 * switch (request.QueryString["fq2s1"].Value)
                 * {
                 *  case "fq2s1o1":
                 *      Settings.FilePrioritizeMode = Settings.FilePrioritizeModeEnum.SmallerFirst;
                 *      break;
                 *  case "fq2s1o2":
                 *      Settings.FilePrioritizeMode = Settings.FilePrioritizeModeEnum.LargerFirst;
                 *      break;
                 *  case "fq2s1o3":
                 *      Settings.FilePrioritizeMode = Settings.FilePrioritizeModeEnum.BoardSpeed;
                 *      break;
                 *  default:
                 *      Settings.FilePrioritizeMode = Settings.FilePrioritizeModeEnum.SmallerFirst;
                 *      break;
                 * }*/

                Settings.AutoRemoveCompleteFiles = request.QueryString["fq3"].Value == "1";

                Settings.Save();

                if (!Settings.EnableAuthentication)
                {
                    session.Clear();
                    response.Cookies.Clear();
                }

                response.Redirect("/settings");
                return(true);
            }

            return(false);
        }