public void Run_UpdateVirtualSpaceAppFlowTest_RenameFileName() { LOG.Debug("execute method run"); UpdateVirtualSpaceAppFlowTestSupport.RemoveVirtualFile(1L); UpdateVirtualSpaceAppFlowTestSupport.RemovePhysicalFile(1L); UpdateVirtualSpaceAppFlowTestSupport.CopyPhysicalSpace_Kinkaku(1L); var aclfile = UpdateVirtualSpaceAppFlowTestSupport.CopyVirtualSpace_Kinkaku_aclgene(1L); aclfile.MoveTo(Path.Combine(aclfile.DirectoryName, "Kinkaku2.jpg.aclgene")); // 新しいACLファイル名前にリネームする aclfile = new FileInfo(Path.Combine(aclfile.DirectoryName, "Kinkaku2.jpg.aclgene")); // ... using (var dbc = new AppDbContext()) { var workspace = WorkspaceRepository.Load(dbc, 1L); var workflow = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow()); workflow.Extensions.Add(new WorkflowExtention(dbc)); var pstack = new ParameterStack(); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.RENAME); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, "Kinkaku2.jpg.aclgene"); // リネーム後のファイル名 pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); var results = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack } }); dbc.SaveChanges(); } using (var dbc = new AppDbContext()) { var filemapinginfoRepository = new FileMappingInfoRepository(dbc); var entity = filemapinginfoRepository.Load(1L); var workspace = WorkspaceRepository.Load(dbc, 1L); // エンティティの値が変わっていることの確認 Assert.AreEqual("Kinkaku2.jpg", entity.MappingFilePath); // 物理ディレクトリ空間での、ファイル名称が変更していることの確認 var physicalFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, "Kinkaku2.jpg")); Assert.IsTrue(physicalFileInfo.Exists); } }
public void GetManyByIdAsync_ItemsDoNotExist_ReturnsEmptyCollection() { MongoDbContext dbContext = RepositoryTestUtils.CreateDbContext(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait(); IEnumerable <string> ids = new string[2] { "1", "2" }; WorkspaceRepository workspaceRepository = new WorkspaceRepository(); IEnumerable <WorkspaceDbModel> result = workspaceRepository.GetManyByIdAsync(dbContext, ids).Result; Assert.AreEqual(0, result.Count()); }
public WorkspaceService(IServiceProvider serviceProvider, IVsSolution solution, DTE dte, IVsUIShellDocumentWindowMgr documentWindowMgr) { _solution = solution; _dte = dte; _serviceProvider = serviceProvider; _documentWindowMgr = documentWindowMgr; _eventsService = new SolutionEventsService(_solution); _repository = new WorkspaceRepository(_solution); //_nameTextChangedService = new WorkspaceNameTextChangedService(); //_keyboardSystem = new KeyboardSystem(); //_keyboardSystem.StartSystem(); _eventsService.SolutionOpened += SolutionOpened; _eventsService.SolutionClosed += SolutionClosed; }
public void TestItemLogRepository() { WorkspaceRepository workspace = new WorkspaceRepository(_context); WorkspaceItem item = new WorkspaceItem() { CreatedBy = "*****@*****.**", // must be a valid user (foreign key validation) CreatedDate = DateTime.Now, Description = "Description...", EndDate = null, Id = Guid.NewGuid(), ItemState = 2, StartDate = null, Summary = "Summary.", Title = "#title#" }; workspace.Create(item); var initial = workspace.GetLogs(item.Id); workspace.AppendLog(item.Id, new WorkspaceItemLog() { Id = Guid.NewGuid(), CreatedBy = item.CreatedBy, CreatedDate = DateTime.Now, Text = "teste 1", Properties = null }); workspace.AppendLog(item.Id, new WorkspaceItemLog() { Id = Guid.NewGuid(), CreatedBy = item.CreatedBy, CreatedDate = DateTime.Now, Text = "teste 2", Properties = new WorkspaceItemLogProperties() { Expenses = 1, LaborHours = 8 } }); var final = workspace.GetLogs(item.Id); workspace.Delete(item.Id); }
/// <summary> /// 「Kinkaku.jpg.aclgene」ファイルを、仮想ディレクトリ空間に作成します /// </summary> /// <returns></returns> public static FileInfo CopyVirtualSpace_Kinkaku_aclgene(long loadWorkspaceId) { FileInfo virtualSpaceFileInfo; Assembly myAssembly = Assembly.GetExecutingAssembly(); string path = Path.GetDirectoryName(myAssembly.Location); var srcFile = new FileInfo(path + "/Assets/Acl/Kinkaku.jpg.aclgene"); using (var dbc = new AppDbContext()) { var repo = new WorkspaceRepository(dbc); var workspace = repo.Load(loadWorkspaceId); virtualSpaceFileInfo = new FileInfo(Path.Combine(workspace.WorkspacePath, srcFile.Name)); srcFile.CopyTo(virtualSpaceFileInfo.FullName, true); } return(virtualSpaceFileInfo); }
public void CreateWorkspaceItem() { WorkspaceRepository workspace = new WorkspaceRepository(_context); WorkspaceItem item = new WorkspaceItem() { CreatedBy = "*****@*****.**", // must be a valid user (foreign key validation) CreatedDate = DateTime.Now, Description = "Description...", EndDate = null, Id = Guid.NewGuid(), ItemState = 2, StartDate = null, Summary = "Summary.", Title = "#title#" }; workspace.Create(item); }
public void Run_UpdateVirtualSpaceAppFlowTest_DeleteFileName() { UpdateVirtualSpaceAppFlowTestSupport.RemoveVirtualFile(1L); UpdateVirtualSpaceAppFlowTestSupport.RemovePhysicalFile(1L); UpdateVirtualSpaceAppFlowTestSupport.CopyPhysicalSpace_Kinkaku(1L); var aclfile = UpdateVirtualSpaceAppFlowTestSupport.CopyVirtualSpace_Kinkaku_aclgene(1L); aclfile.Delete(); using (var dbc = new AppDbContext()) { var workspace = WorkspaceRepository.Load(dbc, 1L); var workflow = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow()); workflow.Extensions.Add(new WorkflowExtention(dbc)); var pstack = new ParameterStack(); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, "Kinkaku.jpg.aclgene"); // 削除したファイル pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); pstack.SetValue("WF_DeleteAclHash", "Test"); var results = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack } }); dbc.SaveChanges(); } using (var dbc = new AppDbContext()) { var workspace = WorkspaceRepository.Load(dbc, 1L); // 物理ファイルが削除されていることを確認する var physicalFileInfo = new FileInfo(Path.Combine(workspace.PhysicalPath, "Kinkaku.jpg")); Assert.IsFalse(physicalFileInfo.Exists); var entity = FileMappingInfoRepository.Load(dbc, 1L); Assert.IsNull(entity); } }
public void GetUserWorkspaces_WhenUserWorkspacesCached_DoesNotFetchFromRepository() { string authUserId = Guid.NewGuid().ToString(); string cacheKey = CacheKeys.UserWorkspace(authUserId); IDbContext dbContext = Substitute.For <IDbContext>(); IEnumerable <WorkspaceViewModel>?cachedViewModel = new WorkspaceViewModel[] { new WorkspaceViewModel() }; UserRepository userRepository = Substitute.For <UserRepository>(); WorkspaceRepository workspaceRepository = Substitute.For <WorkspaceRepository>(); IMemoryCacheWrapper memoryCache = Substitute.For <IMemoryCacheWrapper>(); memoryCache.Get <IEnumerable <WorkspaceViewModel> >(cacheKey).Returns(cachedViewModel); UserWorkspaceViewService userWorkspaceViewService = new UserWorkspaceViewService(dbContext, memoryCache, Substitute.For <IMapper>(), userRepository, workspaceRepository); IEnumerable <WorkspaceViewModel> result = userWorkspaceViewService.GetUserWorkspaces(authUserId).Result; // assert memoryCache.DidNotReceive().Set <IEnumerable <WorkspaceViewModel> >(Arg.Any <string>(), Arg.Any <IEnumerable <WorkspaceViewModel> >(), Arg.Any <TimeSpan>()); workspaceRepository.DidNotReceive().GetManyByIdAsync(Arg.Any <IDbContext>(), Arg.Any <IEnumerable <string> >()); userRepository.DidNotReceive().GetByAuthIdAsync(Arg.Any <IDbContext>(), Arg.Any <string>()); }
/// <summary> /// 仮想ディレクトリ空間のすべてのファイルを削除します /// </summary> /// <param name="loadWorkspaceId">ワークスペース</param> public static void RemoveVirtualFile(long loadWorkspaceId) { using (var dbc = new AppDbContext()) { var repo = new WorkspaceRepository(dbc); var workspace = repo.Load(loadWorkspaceId); var dirInfo = new DirectoryInfo(workspace.WorkspacePath); while (dirInfo.Exists) { Directory.Delete(workspace.WorkspacePath, true); dirInfo = new DirectoryInfo(workspace.WorkspacePath); Thread.Sleep(100); } while (!dirInfo.Exists) { Directory.CreateDirectory(workspace.WorkspacePath); dirInfo = new DirectoryInfo(workspace.WorkspacePath); Thread.Sleep(100); } } }
public void GetManyByIdAsync_ItemsExist_ReturnsCollection() { MongoDbContext dbContext = RepositoryTestUtils.CreateDbContext(); WorkspaceDbModel workspaceDbModel1 = DbModelUtils.GetWorkspaceDbModel(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, workspaceDbModel1).Wait(); WorkspaceDbModel workspaceDbModel2 = DbModelUtils.GetWorkspaceDbModel(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, workspaceDbModel2).Wait(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait(); dbContext.InsertAsync(DbSchema.WorkspaceContainer, DbModelUtils.GetWorkspaceDbModel()).Wait(); IEnumerable <string> ids = new string[2] { workspaceDbModel1.Id, workspaceDbModel2.Id }; WorkspaceRepository workspaceRepository = new WorkspaceRepository(); List <WorkspaceDbModel> result = workspaceRepository.GetManyByIdAsync(dbContext, ids).Result.ToList(); Assert.AreEqual(2, result.Count()); Assert.IsNotNull(result.SingleOrDefault(x => x.Id == workspaceDbModel1.Id)); Assert.IsNotNull(result.SingleOrDefault(x => x.Id == workspaceDbModel2.Id)); }
public ResponseWorkspaceLoadList WorkspaceLoadList(RequestWorkspaceLoadList reqparam) { var resp = new ResponseWorkspaceLoadList(); try { using (var dbc = new AppDbContext()) { var repo = new WorkspaceRepository(dbc); resp.Datas = new List <SVP.CIL.Domain.Workspace>(); foreach (var c in repo.GetAll()) { var domainWorkspace = Mapper.Map <SVP.CIL.Domain.Workspace>(c); resp.Datas.Add(domainWorkspace); } resp.Success = true; } } catch (DbEntityValidationException dbEx) { foreach (DbEntityValidationResult entityErr in dbEx.EntityValidationErrors) { foreach (DbValidationError error in entityErr.ValidationErrors) { Console.WriteLine("Error Property Name {0} : Error Message: {1}", error.PropertyName, error.ErrorMessage); resp.Success = false; } } } return(resp); }
/// <summary> /// 定期的に、ファイル操作があったファイルに対するVFS処理を行う /// </summary> /// <param name="sender"></param> /// <param name="e"></param> async void OnIndexTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) { if (this.IsSuspendIndex) { return; // サスペンド時はインデックス生成処理はスキップする } // インデックス生成処理中は、このメソッドを呼び出すタイマーは停止しておきます。 var timer = sender as System.Timers.Timer; timer.Enabled = false; LOG.Info("タイマー処理の実行"); // ディレクトリ削除イベントが発生している場合、 // 削除したディレクトリに含まれていたファイルを、削除したパスから見つけ出して削除処理を行うキューに追加する lock (sameDirectoryOperation_Locker) { if (sameDirectoryOperation_Name != "") { sameDirectoryOperation_Name = ""; var relativeDirPath = _Workspace.TrimWorekspacePath(sameDirectoryOperation_FullPath, false); /* * using (var dbc = new AppDbContext()) * { * var repo = new FileMappingInfoRepository(dbc); * foreach (var prop in repo.FindBy(p => p.MappingFilePath.StartsWith(relativeDirPath))) * { * var fileUpdateQueueItem = new FileUpdateQueueItem { Target = new FileInfo(Path.Combine(_Workspace.WorkspacePath, prop.MappingFilePath + ".aclgene")) }; * fileUpdateQueueItem.Recents.Add(new RecentInfo { EventType = WatcherChangeTypes.Deleted }); * _UpdatesWatchFiles.AddOrUpdate(prop.MappingFilePath, fileUpdateQueueItem, (_key, _value) => fileUpdateQueueItem); * } * } */ } } // foreach (var @pair in _UpdatesWatchFiles.ToList()) { // 最後のファイル監視状態から、一定時間経過している場合のみ処理を行う。 var @diff = DateTime.Now - @pair.Value.LastUpdate; if (@diff.Seconds >= 10) // 10秒 以上経過 { FileUpdateQueueItem item; // work if (_UpdatesWatchFiles.TryRemove(@pair.Key, out item)) { var @lastItem = item.Recents.LastOrDefault(); // NOTE: UpdateVirtualSpaceFlowワークフローを呼び出す LOG.InfoFormat("ワークフロー実行 [{1}] 対象ファイルパス={0}", item.Target.FullName, @lastItem.EventType); // ワークフロー処理中に発生するファイル更新イベントにより、更新キューに項目が追加されてしまうことを防ぐため、 // 処理中のファイルを更新キューから除外するための除外リストに、処理中のファイルを追加する。 // // ※処理中のファイルがACLファイル以外の場合、対象ファイルのACLファイル名も除外リストに追加する _IgnoreUpdateFiles.Enqueue(item.Target.FullName); if (item.Target.Extension != ".aclgene") { _IgnoreUpdateFiles.Enqueue(item.Target.FullName + ".aclgene"); } try { using (var dbc = new AppDbContext()) { var workspace = WorkspaceRepository.Load(dbc, _Workspace.Id); if (workspace == null) { workspace = _Workspace; } // 処理対象のファイルがACLファイルか、物理ファイルかで処理を切り分けます // ■ACLファイルの場合 // リネーム更新イベントに対応します。 // ■物理ファイルの場合 // リネーム更新イベントも、UPDATEイベントとして処理します。 if (item.Target.Extension == ".aclgene") { var fileNameWithputExtension = item.Target.Name.Replace(item.Target.Extension, ""); switch (@lastItem.EventType) { case WatcherChangeTypes.Renamed: file_rename_acl(dbc, item, workspace); break; case WatcherChangeTypes.Changed: case WatcherChangeTypes.Created: file_create_acl(dbc, item, workspace); break; case WatcherChangeTypes.Deleted: file_remove_acl(dbc, item, workspace); break; } } else { if (File.Exists(item.Target.FullName)) { switch (@lastItem.EventType) { case WatcherChangeTypes.Renamed: case WatcherChangeTypes.Changed: case WatcherChangeTypes.Created: file_create_normal(dbc, item, workspace); break; case WatcherChangeTypes.Deleted: break; } } else { LOG.InfoFormat("「{0}」は存在しない物理ファイルのため、処理をスキップします。", item.Target.FullName); } } dbc.SaveChanges(); } } catch (Exception expr) { LOG.ErrorFormat("タイマー処理時エラー = {0}", expr.Message); } // 処理を終了したファイルを、除外リストから削除します string ignoreUpdateFile; _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile); if (item.Target.Extension != ".aclgene") { _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile); } } } // [CPU使用率に対するループ遅延を行う] var cpuPer = _CpuCounter.NextValue(); if (cpuPer > 90.0) { await Task.Delay(100); // 100msec待機 } else if (cpuPer > 30.0) { //await Task.Delay(10); // 10msec待機 } } timer.Enabled = true; }
public WorkspacesFacade(WorkspaceRepository workspaceRepository, FileRepository fileRepository, Mapper mapper) { mWorkspaceRepository = workspaceRepository; mFileRepository = fileRepository; mMapper = mapper; }
public WorkspaceController(WorkspaceRepository repo, AuthenticationHandler auth) { _repo = repo; _auth = auth; }
public WorkspaceController(SessionContext sessionContext, WorkspaceRepository workspaceRepository, FileSystem fileSystem) { _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); _sessionContext = sessionContext ?? throw new ArgumentNullException(nameof(sessionContext)); _workspaceRepository = workspaceRepository ?? throw new ArgumentNullException(nameof(workspaceRepository)); }
public UserWorkspaceViewService(IDbContext dbContext, IMemoryCacheWrapper memoryCache, IMapper mapper, UserRepository userRepository, WorkspaceRepository workspaceRepository) { this._dbContext = dbContext; this._memoryCache = memoryCache; this._mapper = mapper; this._userRepository = userRepository; this._workspaceRepository = workspaceRepository; }
public WorkspaceController(WorkspaceRepository wr) => this.wr = wr;
public static void ClassInitialize(TestContext testContext) { // // This is called from other tests e.g. DynamicServicesInvokerTest // lock (InitLock) { if (_isInitialized) { return; } Directory.SetCurrentDirectory(testContext.TestDir); _testDir = testContext.TestDir; var workspaceID = Guid.NewGuid(); #region Copy server services to file system var workspacePath = Path.Combine(GlobalConstants.WorkspacePath, workspaceID.ToString()); #region Initialize services _servicesPath = Path.Combine(workspacePath, "Services"); var servicesVersionControlPath = Path.Combine(_servicesPath, "VersionControl"); var serverServicesPath = Path.Combine(_testDir, "Services"); Directory.CreateDirectory(_servicesPath); Directory.CreateDirectory(servicesVersionControlPath); Directory.CreateDirectory(serverServicesPath); var xml = XmlResource.Fetch(ServiceName); xml.Save(Path.Combine(_servicesPath, ServiceName + ".xml")); xml.Save(Path.Combine(servicesVersionControlPath, ServiceName + ".V" + VersionNo + ".xml")); xml.Save(Path.Combine(serverServicesPath, ServiceName + ".xml")); xml = XmlResource.Fetch(ServiceNameUnsigned); xml.Save(Path.Combine(_servicesPath, ServiceNameUnsigned + ".xml")); xml.Save(Path.Combine(servicesVersionControlPath, ServiceNameUnsigned + ".V" + VersionNo + ".xml")); xml.Save(Path.Combine(serverServicesPath, ServiceNameUnsigned + ".xml")); _testServiceDefinition = xml.ToString(); #endregion #region Initialize sources _sourcesPath = Path.Combine(workspacePath, "Sources"); var sourcesVersionControlPath = Path.Combine(_sourcesPath, "VersionControl"); var serverSourcesPath = Path.Combine(_testDir, "Sources"); Directory.CreateDirectory(_sourcesPath); Directory.CreateDirectory(sourcesVersionControlPath); Directory.CreateDirectory(serverSourcesPath); xml = XmlResource.Fetch(SourceName); xml.Save(Path.Combine(_sourcesPath, SourceName + ".xml")); xml.Save(Path.Combine(sourcesVersionControlPath, SourceName + ".V" + VersionNo + ".xml")); xml.Save(Path.Combine(serverSourcesPath, SourceName + ".xml")); _testSourceDefinition = xml.ToString(); xml = XmlResource.Fetch(ServerConnection1Name); xml.Save(Path.Combine(_sourcesPath, ServerConnection1ResourceName + ".xml")); xml.Save(Path.Combine(_sourcesPath, ServerConnection1ResourceName + ".xml")); xml.Save(Path.Combine(sourcesVersionControlPath, ServerConnection1ResourceName + ".V" + VersionNo + ".xml")); xml.Save(Path.Combine(serverSourcesPath, ServerConnection1ResourceName + ".xml")); xml = XmlResource.Fetch(ServerConnection2Name); xml.Save(Path.Combine(_sourcesPath, ServerConnection2ResourceName + ".xml")); xml.Save(Path.Combine(sourcesVersionControlPath, ServerConnection2ResourceName + ".V" + VersionNo + ".xml")); xml.Save(Path.Combine(serverSourcesPath, ServerConnection2ResourceName + ".xml")); #endregion #endregion _workspace = WorkspaceRepository.Instance.Get(workspaceID); _testInstance = WorkspaceRepository.Instance; _isInitialized = true; } }
/// <summary> /// InMemoryデータベース用のユニットテストデータを作成する /// </summary> void ImportInitializeData(int threadId, SimpleInjector.Container container) { var @dbc = (AppDbContext)container.GetInstance <IAppDbContext>(); // Category var repo_Category = new CategoryRepository(@dbc); repo_Category.Add(new Category { Id = 2, Name = "テストカテゴリA" }); repo_Category.Add(new Category { Id = 3, Name = "テストカテゴリA2" }); repo_Category.Add(new Category { Id = 4, Name = "テストカテゴリA3" }); // Label var repo_Label = new LabelRepository(@dbc); repo_Label.Add(new Label { Id = 1, Name = "テストラベル" }); repo_Label.Add(new Label { Id = 2, Name = "テストラベル_2", Category = (Category)repo_Category.Load(1) }); // Content var repo_Content = new ContentRepository(@dbc); repo_Content.Add(new Content { Id = 1, Name = "Content1", IdentifyKey = "IDEN_Content1" }); repo_Content.Add(new Content { Id = 2, Name = "Content2", IdentifyKey = "IDEN_Content2", }); repo_Content.Add(new Content { Id = 3, Name = "Content3", IdentifyKey = "IDEN_Content3" }); // Workspace var repo_Workspace = new WorkspaceRepository(@dbc); var workspace1 = new Workspace { Id = 1, Name = "UT_Workspace", PhysicalPath = Path.Combine(TESTDATADIRECTORY, "PixstockSrvUT_" + threadId) }; repo_Workspace.Add(workspace1); // FileMappingInfo var repo_FileMappingInfo = new FileMappingInfoRepository(@dbc); repo_FileMappingInfo.Add(new FileMappingInfo { Id = 1, AclHash = "ABC1", Workspace = workspace1 }); @dbc.SaveChanges(); var label2 = repo_Label.Load(2L); label2.Contents.Add(new Label2Content { ContentId = 1L, Content = (Content)repo_Content.Load(1L), LabelId = 2L, Label = label2 }); @dbc.SaveChanges(); }
public AdminNotifyHub(KeycloakFacade keycloakFacade, WorkspaceRepository workspaceRepository, ILogger auditLogger) { mKeycloakFacade = keycloakFacade; mWorkspaceRepository = workspaceRepository; mAuditLogger = auditLogger; }
public AdministratorController(KeycloakFacade keycloakFacade, WorkspaceRepository workspaceRepository, ILogger auditLogger) { mKeycloakFacade = keycloakFacade; mWorkspaceRepository = workspaceRepository; mAuditLogger = auditLogger; }
/// <summary> /// インデックス作成処理を一定間隔で行います /// </summary> /// <param name="sender"></param> /// <param name="e"></param> async void OnIndexTimerElapsed(object sender, System.Timers.ElapsedEventArgs e) { if (this.IsSuspendIndex) { return; // サスペンド時はインデックス生成処理はスキップする } // インデックス生成処理中は、このメソッドを呼び出すタイマーは停止しておきます。 var timer = sender as System.Timers.Timer; timer.Enabled = false; LOG.Info("タイマー処理の実行"); // ディレクトリ削除イベントが発生している場合、 // 削除したディレクトリに含まれていたファイルを、削除したパスから見つけ出して削除処理を行うキューに追加する lock (sameDirectoryOperation_Locker) { if (sameDirectoryOperation_Name != "") { sameDirectoryOperation_Name = ""; var relativeDirPath = _Workspace.TrimWorekspacePath(sameDirectoryOperation_FullPath, false); using (var dbc = new AppDbContext()) { var repo = new FileMappingInfoRepository(dbc); foreach (var prop in repo.FindBy(p => p.MappingFilePath.StartsWith(relativeDirPath))) { var fileUpdateQueueItem = new FileUpdateQueueItem { Target = new FileInfo(Path.Combine(_Workspace.WorkspacePath, prop.MappingFilePath + ".aclgene")) }; fileUpdateQueueItem.Recents.Add(new RecentInfo { EventType = WatcherChangeTypes.Deleted }); _UpdatesWatchFiles.AddOrUpdate(prop.MappingFilePath, fileUpdateQueueItem, (_key, _value) => fileUpdateQueueItem); } } } } // foreach (var @pair in _UpdatesWatchFiles.ToList()) { // 最後のファイル監視状態から、一定時間経過している場合のみ処理を行う。 var @diff = DateTime.Now - @pair.Value.LastUpdate; if (@diff.Seconds >= 10) // 10秒 以上経過 { FileUpdateQueueItem item; // work if (_UpdatesWatchFiles.TryRemove(@pair.Key, out item)) { var @lastItem = item.Recents.LastOrDefault(); // NOTE: UpdateVirtualSpaceFlowワークフローを呼び出す LOG.InfoFormat("ワークフロー実行 [{1}] 対象ファイルパス={0}", item.Target.FullName, @lastItem.EventType); // ワークフロー処理中に発生するファイル更新イベントにより、更新キューに項目が追加されてしまうことを防ぐため、 // 処理中のファイルを更新キューから除外するための除外リストに、処理中のファイルを追加する。 // // ※処理中のファイルがACLファイル以外の場合、対象ファイルのACLファイル名も除外リストに追加する _IgnoreUpdateFiles.Enqueue(item.Target.FullName); if (item.Target.Extension != ".aclgene") { _IgnoreUpdateFiles.Enqueue(item.Target.FullName + ".aclgene"); } try { using (var dbc = new AppDbContext()) { var workspace = WorkspaceRepository.Load(dbc, _Workspace.Id); var workflow = new WorkflowInvoker(new UpdateVirtualSpaceAppFlow()); workflow.Extensions.Add(new WorkflowExtention(dbc)); var pstack = new ParameterStack(); // 処理対象のファイルがACLファイルか、物理ファイルかで処理を切り分けます // ■ACLファイルの場合 // リネーム更新イベントに対応します。 // ■物理ファイルの場合 // リネーム更新イベントも、UPDATEイベントとして処理します。 if (item.Target.Extension == ".aclgene") { var fileNameWithputExtension = item.Target.Name.Replace(item.Target.Extension, ""); switch (@lastItem.EventType) { case WatcherChangeTypes.Renamed: pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.RENAME); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, item.Target.Name); // リネーム後のファイル名 pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); var results_renamed = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack }, //{"EventType", UpdateVirtualStatusEventType.RENAME}, //{"Target", item.Target}, //{"BeforeRenameName",item.OldRenameNamePath}, //{"Workspace", workspace} }); break; case WatcherChangeTypes.Changed: case WatcherChangeTypes.Created: var aclfileLocalPath = workspace.TrimWorekspacePath(item.Target.FullName, false); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.UPDATE); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath); // 移動後のファイルパス pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); var results_changed = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack }, //{"EventType", UpdateVirtualStatusEventType.UPDATE}, //{"Target", item.Target}, //{"Workspace", workspace} }); break; case WatcherChangeTypes.Deleted: var aclfileLocalPath_Delete = workspace.TrimWorekspacePath(item.Target.FullName, false); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Delete); // 削除したファイル pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); pstack.SetValue("WF_DeleteAclMappingFilePath", fileNameWithputExtension); var results_deleted = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack }, //{"EventType", UpdateVirtualStatusEventType.DELETE}, //{"Target", item.Target}, //{"DeleteAclHash", @pair.Key}, //{"Workspace", workspace} }); break; } } else { if (File.Exists(item.Target.FullName)) { switch (@lastItem.EventType) { case WatcherChangeTypes.Renamed: case WatcherChangeTypes.Changed: case WatcherChangeTypes.Created: var aclfileLocalPath_Update = workspace.TrimWorekspacePath(item.Target.FullName, false); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.UPDATE); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Update); // 削除したファイル pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); var results_changed = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack }, //{"EventType", UpdateVirtualStatusEventType.UPDATE}, //{"Target", item.Target}, //{"Workspace", workspace} }); break; case WatcherChangeTypes.Deleted: var aclfileLocalPath_Delete = workspace.TrimWorekspacePath(item.Target.FullName, false); pstack.SetValue("Event", Mogami.Core.Constructions.UpdateVirtualStatusEventType.DELETE); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEINFO, item.Target); pstack.SetValue(ActivityParameterStack.WORKSPACE_FILEPATH, aclfileLocalPath_Delete); // 削除したファイル pstack.SetValue(ActivityParameterStack.WORKSPACE, workspace); var results_deleted = workflow.Invoke(new Dictionary <string, object> { { "ParameterStack", pstack }, //{"EventType", UpdateVirtualStatusEventType.DELETE}, //{"Target", item.Target}, //{"Workspace", workspace} }); break; } } else { LOG.InfoFormat("「{0}」は存在しない物理ファイルのため、処理をスキップします。", item.Target.FullName); } } dbc.SaveChanges(); } } catch (Exception expr) { LOG.ErrorFormat("タイマー処理時エラー = {0}", expr.Message); } // 処理を終了したファイルを、除外リストから削除します string ignoreUpdateFile; _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile); if (item.Target.Extension != ".aclgene") { _IgnoreUpdateFiles.TryDequeue(out ignoreUpdateFile); } } } // [CPU使用率に対するループ遅延を行う] var cpuPer = _CpuCounter.NextValue(); if (cpuPer > 90.0) { await Task.Delay(100); // 100msec待機 } else if (cpuPer > 30.0) { //await Task.Delay(10); // 10msec待機 } } timer.Enabled = true; }