Showing preview only (1,085K chars total). Download the full file or copy to clipboard to get everything.
Repository: Microsoft/Yams
Branch: master
Commit: af88b48bdf43
Files: 410
Total size: 972.2 KB
Directory structure:
gitextract_py2cqu4t/
├── .gitattributes
├── .gitignore
├── Docs/
│ ├── Continuous_Integration.md
│ ├── Contributor_Guide.md
│ ├── Deploy&Host_an_App_in_YAMS.md
│ ├── Deploy_Orleans_App_in_YAMS.md
│ ├── Deploy_YAMS.md
│ ├── Overview.md
│ └── YAMS_Storage.md
├── Etg.Yams.sln
├── Etg.Yams.sln.DotSettings
├── LICENSE
├── README.md
├── SECURITY.md
├── Samples/
│ ├── Etg.Yams.ARM/
│ │ ├── Etg.Yams.ARM.sln
│ │ ├── Etg.Yams.Host/
│ │ │ ├── App.config
│ │ │ ├── Etg.Yams.Host.csproj
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ └── README.md
│ ├── Etg.Yams.Cloud/
│ │ ├── Backend/
│ │ │ ├── Backend.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Etg.Yams.Cloud.MultipleClusters/
│ │ │ ├── BackendContent/
│ │ │ │ ├── GCSettingsManagement.ps1
│ │ │ │ ├── ServerGC.cmd
│ │ │ │ └── diagnostics.wadcfgx
│ │ │ ├── Etg.Yams.Cloud.MultipleClusters.ccproj
│ │ │ ├── FrontendContent/
│ │ │ │ └── diagnostics.wadcfgx
│ │ │ ├── ServiceConfiguration.Cloud.cscfg
│ │ │ ├── ServiceConfiguration.Local.cscfg
│ │ │ └── ServiceDefinition.csdef
│ │ ├── Etg.Yams.Cloud.MultipleClusters.sln
│ │ ├── Etg.Yams.Cloud.SingleCluster/
│ │ │ ├── Etg.Yams.Cloud.SingleCluster.ccproj
│ │ │ ├── ServiceConfiguration.Cloud.cscfg
│ │ │ ├── ServiceConfiguration.Local.cscfg
│ │ │ ├── ServiceDefinition.csdef
│ │ │ └── SingleClusterRoleContent/
│ │ │ ├── GCSettingsManagement.ps1
│ │ │ ├── ServerGC.cmd
│ │ │ └── diagnostics.wadcfgx
│ │ ├── Etg.Yams.Cloud.SingleCluster.sln
│ │ ├── Etg.Yams.WorkerRole/
│ │ │ ├── Etg.Yams.WorkerRole.csproj
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ └── SlowCheetah/
│ │ │ │ └── SlowCheetah.Transforms.targets
│ │ │ ├── Utils/
│ │ │ │ ├── AzureUtils.cs
│ │ │ │ └── DeploymentIdUtils.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── WorkerRoleConfig.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Frontend/
│ │ │ ├── Frontend.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ └── SingleClusterRole/
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── SingleClusterRole.csproj
│ │ ├── WorkerRole.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── OrleansApp/
│ │ ├── GrainInterfaces/
│ │ │ ├── GrainInterfaces.csproj
│ │ │ ├── IHelloGrain.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ ├── Grains/
│ │ │ ├── Grains.csproj
│ │ │ ├── HelloGrain.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ ├── OrleansApp.sln
│ │ ├── SiloHost/
│ │ │ ├── App.config
│ │ │ ├── AppConfig.json
│ │ │ ├── OrleansHostWrapper.cs
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── SiloHost.csproj
│ │ │ └── packages.config
│ │ └── WebApp/
│ │ ├── App.config
│ │ ├── App.cs
│ │ ├── AppConfig.json
│ │ ├── ApplicationController.cs
│ │ ├── OrleansHelloController.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Startup.cs
│ │ ├── WebApp.csproj
│ │ └── packages.config
│ ├── Samples.sln
│ ├── WebApp/
│ │ ├── PublishScripts/
│ │ │ ├── AzureWebsitePublishModule.psm1
│ │ │ ├── Configurations/
│ │ │ │ └── WebApp-WAWS-dev.json
│ │ │ └── Publish-WebApplicationWebsite.ps1
│ │ ├── WebApp/
│ │ │ ├── App.config
│ │ │ ├── App.cs
│ │ │ ├── AppConfig.json
│ │ │ ├── ApplicationController.cs
│ │ │ ├── CoinFlipController.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Startup.cs
│ │ │ ├── WebApp.csproj
│ │ │ └── packages.config
│ │ └── WebApp.sln
│ └── YamsStudio/
│ ├── AddNewApplicationDialog.xaml
│ ├── AddNewApplicationDialog.xaml.cs
│ ├── AddNewDeploymentDialog.xaml
│ ├── AddNewDeploymentDialog.xaml.cs
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── BusyWindow.xaml
│ ├── BusyWindow.xaml.cs
│ ├── ConnectToStorageAccountDialog.xaml
│ ├── ConnectToStorageAccountDialog.xaml.cs
│ ├── DeploymentInfo.cs
│ ├── DeploymentRepositoryFactory.cs
│ ├── DeploymentRepositoryManager.cs
│ ├── IDeploymentRepositoryFactory.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── SelectDirectoryControl.xaml
│ ├── SelectDirectoryControl.xaml.cs
│ ├── StorageAccountConnectionInfo.cs
│ ├── UpdateVersionDialog.xaml
│ ├── UpdateVersionDialog.xaml.cs
│ ├── YamsStudio.csproj
│ └── packages.config
├── src/
│ ├── AzureBlobStorageDeploymentRepository/
│ │ ├── AzureBlobStorageDeploymentRepository.csproj
│ │ ├── BlobStorageDeploymentRepository.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── AzureBlobStorageUpdateSession/
│ │ ├── AzureBlobStorageUpdateSession.csproj
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── UpdateSession/
│ │ │ ├── AzureStorageUpdateSessionDiModule.cs
│ │ │ ├── AzureTableUpdateSessionManager.cs
│ │ │ ├── IUpdateBlob.cs
│ │ │ ├── IUpdateBlobFactory.cs
│ │ │ ├── IUpdateSessionTable.cs
│ │ │ ├── Retry/
│ │ │ │ ├── LockUpdateBlobErrorDetectionStrategy.cs
│ │ │ │ ├── StartUpdateSessionRetryDecorator.cs
│ │ │ │ ├── StorageExceptionErrorDetectionStrategy.cs
│ │ │ │ ├── StorageExceptionUpdateSessionRetryDecorator.cs
│ │ │ │ └── UpdateBlobFactoryRetryLockDecorator.cs
│ │ │ ├── UpdateBlob.cs
│ │ │ ├── UpdateBlobFactory.cs
│ │ │ ├── UpdateBlobUnavailableException.cs
│ │ │ ├── UpdateDomainEntity.cs
│ │ │ ├── UpdateSessionStatus.cs
│ │ │ ├── UpdateSessionTable.cs
│ │ │ └── UpdateSessionTransaction.cs
│ │ └── packages.config
│ ├── AzureBlobUtils/
│ │ ├── AzureBlobUtils.csproj
│ │ ├── BlobUtils.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ └── packages.config
│ ├── AzureUtils/
│ │ ├── AzureUtils.csproj
│ │ ├── Lease/
│ │ │ ├── BlobLeaseFactory.cs
│ │ │ ├── IBlobLease.cs
│ │ │ ├── IBlobLeaseFactory.cs
│ │ │ └── SelfRenewableBlobLease.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Utils/
│ │ │ └── BlobUtils.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── Common/
│ │ ├── Common.csproj
│ │ ├── FileUtils.cs
│ │ ├── Json/
│ │ │ ├── IJsonSerializer.cs
│ │ │ └── JsonSerializer.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Utils/
│ │ │ ├── DictionaryUtils.cs
│ │ │ ├── FileUtils.cs
│ │ │ ├── HashCodeUtils.cs
│ │ │ ├── TaskExtensions.cs
│ │ │ └── TraceUtils.cs
│ │ └── packages.config
│ ├── Etg.Yams/
│ │ ├── Etg.Yams.csproj
│ │ ├── Etg.Yams.nuspec
│ │ ├── NuGetPack.bat
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── YamsServiceFactory.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── Etg.Yams.Client/
│ │ ├── Etg.Yams.Client.csproj
│ │ ├── Etg.Yams.Client.nuspec
│ │ ├── IProcessArgsParser.cs
│ │ ├── IYamsClient.cs
│ │ ├── IYamsClientFactory.cs
│ │ ├── NuGetPack.bat
│ │ ├── ProcessArgsParser.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── YamsClient.cs
│ │ ├── YamsClientConfig.cs
│ │ ├── YamsClientConfigBuilder.cs
│ │ ├── YamsClientFactory.cs
│ │ ├── YamsClientOptions.cs
│ │ └── packages.config
│ ├── Etg.Yams.Core/
│ │ ├── Application/
│ │ │ ├── AppIdentity.cs
│ │ │ ├── Application.cs
│ │ │ ├── ApplicationConfig.cs
│ │ │ ├── ApplicationConfigParser.cs
│ │ │ ├── ApplicationConfigSymbolResolver.cs
│ │ │ ├── ApplicationPool.cs
│ │ │ ├── ConfigurableApplication.cs
│ │ │ ├── ConfigurableApplicationFactory.cs
│ │ │ ├── IApplication.cs
│ │ │ ├── IApplicationConfigParser.cs
│ │ │ ├── IApplicationConfigSymbolResolver.cs
│ │ │ ├── IApplicationFactory.cs
│ │ │ └── IApplicationPool.cs
│ │ ├── Constants.cs
│ │ ├── Deploy/
│ │ │ ├── AndDeploymentMatcher.cs
│ │ │ ├── ClusterIdDeploymentMatcher.cs
│ │ │ ├── IAppDeploymentMatcher.cs
│ │ │ ├── IApplicationDeploymentDirectory.cs
│ │ │ ├── PropertiesDeploymentMatcher.cs
│ │ │ └── RemoteApplicationDeploymentDirectory.cs
│ │ ├── Download/
│ │ │ ├── ApplicationDownloader.cs
│ │ │ └── IApplicationDownloader.cs
│ │ ├── Etg.Yams.Core.csproj
│ │ ├── IYamsService.cs
│ │ ├── Install/
│ │ │ ├── AppInstallConfig.cs
│ │ │ ├── ApplicationInstaller.cs
│ │ │ └── IApplicationInstaller.cs
│ │ ├── Os/
│ │ │ ├── ISystem.cs
│ │ │ ├── System.cs
│ │ │ └── SystemExtensions.cs
│ │ ├── Process/
│ │ │ ├── AbstractProcessDecorator.cs
│ │ │ ├── GracefullShutdownProcessDecorator.cs
│ │ │ ├── HealthProcessDecorator.cs
│ │ │ ├── IProcess.cs
│ │ │ ├── IProcessFactory.cs
│ │ │ ├── IProcessStopper.cs
│ │ │ ├── MonitorInitProcessDecorator.cs
│ │ │ ├── Process.cs
│ │ │ ├── ProcessFactory.cs
│ │ │ ├── ProcessStopper.cs
│ │ │ └── SelfRestartingProcess.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Storage/
│ │ │ ├── BinariesNotFoundException.cs
│ │ │ ├── Config/
│ │ │ │ ├── AppDeploymentConfig.cs
│ │ │ │ ├── DeploymentConfig.cs
│ │ │ │ ├── IDeploymentConfigSerializer.cs
│ │ │ │ └── JsonDeploymentConfigSerializer.cs
│ │ │ ├── ConflictResolutionMode.cs
│ │ │ ├── DuplicateBinariesException.cs
│ │ │ ├── IDeploymentRepository.cs
│ │ │ ├── IDeploymentStatusReader.cs
│ │ │ ├── IDeploymentStatusWriter.cs
│ │ │ └── Status/
│ │ │ ├── AppDeploymentStatus.cs
│ │ │ ├── ClusterDeploymentStatus.cs
│ │ │ ├── DeploymentStatus.cs
│ │ │ ├── IDeploymentStatusSerializer.cs
│ │ │ ├── InstanceDeploymentStatus.cs
│ │ │ └── JsonDeploymentStatusSerializer.cs
│ │ ├── Update/
│ │ │ ├── ApplicationUpdateManager.cs
│ │ │ ├── IApplicationUpdateManager.cs
│ │ │ └── IUpdateSessionManager.cs
│ │ ├── Utils/
│ │ │ ├── ApplicationUtils.cs
│ │ │ ├── EnvironmentUtils.cs
│ │ │ └── ProcessUtils.cs
│ │ ├── Watcher/
│ │ │ ├── DeploymentWatcher.cs
│ │ │ └── IDeploymentWatcher.cs
│ │ ├── YamsConfig.cs
│ │ ├── YamsConfigBuilder.cs
│ │ ├── YamsDiModule.cs
│ │ ├── YamsService.cs
│ │ └── packages.config
│ ├── Etg.Yams.Host/
│ │ ├── App.config
│ │ ├── Etg.Yams.Host.csproj
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Etg.Yams.Ipc/
│ │ ├── Etg.Yams.Ipc.csproj
│ │ ├── IIpcConnection.cs
│ │ ├── INamedPipe.cs
│ │ ├── INamedPipeFactory.cs
│ │ ├── IpcConnection.cs
│ │ ├── NamedPipeClientAdapter.cs
│ │ ├── NamedPipeFactory.cs
│ │ ├── NamedPipeServerAdapter.cs
│ │ └── Properties/
│ │ └── AssemblyInfo.cs
│ └── Etg.Yams.Powershell/
│ ├── ConnectDeploymentRepositoryCmdlet.cs
│ ├── Etg.Yams.Powershell.csproj
│ ├── Etg.Yams.Powershell.nuspec
│ ├── GetDeploymentConfigCmdlet.cs
│ ├── GetDeploymentStatusCmdlet.cs
│ ├── InstallApplicationsCmdlet.cs
│ ├── NuGetPack.bat
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SetDeploymentConfigCmdlet.cs
│ ├── UninstallApplicationsCmdlet.cs
│ ├── app.config
│ └── packages.config
└── test/
├── AzureBlobStorageDeploymentRepositoryTest/
│ ├── AzureBlobStorageDeploymentRepositoryTest.csproj
│ ├── BlobStorageDeploymentRepositoryTest.cs
│ ├── Data/
│ │ └── DeploymentRepository/
│ │ └── DeploymentConfig.json
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── AzureBlobStorageUpdateSessionTest/
│ ├── AzureBlobStorageUpdateSessionTest.csproj
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SimpleStubs.json
│ ├── UpdateSession/
│ │ ├── AzureTableUpdateSessionManagerTests.cs
│ │ ├── Retry/
│ │ │ ├── UpdateBlobFactoryRetryLockDecoratorTest.cs
│ │ │ └── UpdateSessionManagerRetryDecoratorTest.cs
│ │ └── UpdateBlobTest.cs
│ └── packages.config
├── AzureTestUtils/
│ ├── AzureStorageEmulatorProxy.cs
│ ├── AzureTestUtils.csproj
│ ├── Fixtures/
│ │ └── AzureStorageEmulatorTestFixture.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── AzureUtilsTest/
│ ├── AzureUtilsTest.csproj
│ ├── BlobUtilsTest.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── Etg.Yams.Core.Test/
│ ├── Application/
│ │ ├── ApplicationConfigParserTest.cs
│ │ ├── ApplicationConfigSymbolResolverTest.cs
│ │ ├── ApplicationPoolTest.cs
│ │ └── ApplicationTest.cs
│ ├── Client/
│ │ └── YamsProcessArgsParserTest.cs
│ ├── Data/
│ │ ├── ApplicationConfigParser/
│ │ │ └── AppConfig.json
│ │ ├── ApplicationPool/
│ │ │ └── test.myapp/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.0.1/
│ │ │ └── AppConfig.json
│ │ ├── DeploymentConfig/
│ │ │ └── DeploymentConfig.json
│ │ └── EndToEndTest/
│ │ ├── DeploymentConfig.json
│ │ ├── DeploymentConfigFullIpcApp.json
│ │ ├── DeploymentConfigGracefulShutdownApp.json
│ │ ├── DeploymentConfigHeartBeatApp.json
│ │ ├── DeploymentConfigMonitorInitApp.json
│ │ ├── DeploymentConfigNoApps.json
│ │ ├── DeploymentConfigUpdate.json
│ │ ├── DeploymentConfigWithProperties.json
│ │ ├── FullIpcApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── GracefulShutdownApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── HeartBeatApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── MonitorInitApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── test.app1/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.0.1/
│ │ │ └── AppConfig.json
│ │ ├── test.app2/
│ │ │ ├── 1.1.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 2.0.0-beta/
│ │ │ └── AppConfig.json
│ │ ├── test.app3/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.1.0/
│ │ │ └── AppConfig.json
│ │ └── test.app4/
│ │ └── 1.0.0/
│ │ └── AppConfig.json
│ ├── EndToEndTest.cs
│ ├── Etg.Yams.Core.Test.csproj
│ ├── Etg.Yams.Test.xunit.runner.json
│ ├── Install/
│ │ └── ApplicationInstallerTest.cs
│ ├── Process/
│ │ ├── GracefulShutdownProcessDecoratorTest.cs
│ │ ├── ProcessStopperTest.cs
│ │ ├── ProcessTest.cs
│ │ └── SelfRestartingProcessTest.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Storage/
│ │ ├── DeploymentConfigTest.cs
│ │ └── LocalDeploymentRepository.cs
│ ├── System/
│ │ └── SystemExtensionsTest.cs
│ ├── Update/
│ │ └── ApplicationUpdateManagerTest.cs
│ ├── Utils/
│ │ ├── AssertUtils.cs
│ │ └── TestUtils.cs
│ ├── app.config
│ ├── packages.config
│ └── stubs/
│ ├── ApplicationFactoryStub.cs
│ ├── ApplicationInstallerStub.cs
│ ├── ApplicationPoolStub.cs
│ ├── ApplicationStub.cs
│ └── ProcessStub.cs
├── FullIpcProcess/
│ ├── App.config
│ ├── FullIpcProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── GracefullShutdownProcess/
│ ├── GracefullShutdownProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── HangingProcess/
│ ├── App.config
│ ├── HangingProcess.csproj
│ ├── Program.cs
│ └── Properties/
│ └── AssemblyInfo.cs
├── HeartBeatProcess/
│ ├── App.config
│ ├── HeartBeatProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── MonitorInitProcess/
│ ├── MonitorInitProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── Stubs/
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SimpleStubs.json
│ ├── Stubs.csproj
│ └── packages.config
├── SuicidalProcess/
│ ├── App.config
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── SuicidalProcess.csproj
├── TestProcess/
│ ├── App.config
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── TestProcess.csproj
└── TestUtils/
├── AssertUtils.cs
├── AsyncUtils.cs
├── Properties/
│ └── AssemblyInfo.cs
├── TestUtils.csproj
└── packages.config
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
###############################################################################
# Set default behavior to automatically normalize line endings.
###############################################################################
* text=auto
###############################################################################
# Set default behavior for command prompt diff.
#
# This is need for earlier builds of msysgit that does not have it on by
# default for csharp files.
# Note: This is only used by command line
###############################################################################
#*.cs diff=csharp
###############################################################################
# Set the merge driver for project and solution files
#
# Merging from the command prompt will add diff markers to the files if there
# are conflicts (Merging from VS is not affected by the settings below, in VS
# the diff markers are never inserted). Diff markers may cause the following
# file extensions to fail to load in VS. An alternative would be to treat
# these files as binary and thus will always conflict and require user
# intervention with every merge. To do so, just uncomment the entries below
###############################################################################
#*.sln merge=binary
#*.csproj merge=binary
#*.vbproj merge=binary
#*.vcxproj merge=binary
#*.vcproj merge=binary
#*.dbproj merge=binary
#*.fsproj merge=binary
#*.lsproj merge=binary
#*.wixproj merge=binary
#*.modelproj merge=binary
#*.sqlproj merge=binary
#*.wwaproj merge=binary
###############################################################################
# behavior for image files
#
# image files are treated as binary by default.
###############################################################################
#*.jpg binary
#*.png binary
#*.gif binary
###############################################################################
# diff behavior for common document formats
#
# Convert binary document formats to text before diffing them. This feature
# is only available from the command line. Turn it on by uncommenting the
# entries below.
###############################################################################
#*.doc diff=astextplain
#*.DOC diff=astextplain
#*.docx diff=astextplain
#*.DOCX diff=astextplain
#*.dot diff=astextplain
#*.DOT diff=astextplain
#*.pdf diff=astextplain
#*.PDF diff=astextplain
#*.rtf diff=astextplain
#*.RTF diff=astextplain
================================================
FILE: .gitignore
================================================
## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
# Ignore exe's
*.exe
*.exe.config
# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.generated.cs
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs
# Build results
[Dd]ebug/
[Dd]ebugPublic/
[Rr]elease/
[Rr]eleases/
x64/
x86/
build/
bld/
[Bb]in/
[Oo]bj/
# Visual Studo 2015 cache/options directory
.vs/
# Rider ide directory
.idea/
# MSTest test Results
[Tt]est[Rr]esult*/
[Bb]uild[Ll]og.*
# NUNIT
*.VisualState.xml
TestResult.xml
# Build Results of an ATL Project
[Dd]ebugPS/
[Rr]eleasePS/
dlldata.c
*_i.c
*_p.c
*_i.h
*.ilk
*.meta
*.obj
*.pch
*.pdb
*.pgc
*.pgd
*.rsp
*.sbr
*.tlb
*.tli
*.tlh
*.tmp
*.tmp_proj
*.log
*.vspscc
*.vssscc
.builds
*.pidb
*.svclog
*.scc
# Chutzpah Test files
_Chutzpah*
# Visual C++ cache files
ipch/
*.aps
*.ncb
*.opensdf
*.sdf
*.cachefile
# Visual Studio profiler
*.psess
*.vsp
*.vspx
# TFS 2012 Local Workspace
$tf/
# Guidance Automation Toolkit
*.gpState
# ReSharper is a .NET coding add-in
_ReSharper*/
*.[Rr]e[Ss]harper
*.DotSettings.user
# JustCode is a .NET coding addin-in
.JustCode
# TeamCity is a build add-in
_TeamCity*
# DotCover is a Code Coverage Tool
*.dotCover
# NCrunch
_NCrunch_*
.*crunch*.local.xml
# MightyMoose
*.mm.*
AutoTest.Net/
# Web workbench (sass)
.sass-cache/
# Installshield output folder
[Ee]xpress/
# DocProject is a documentation generator add-in
DocProject/buildhelp/
DocProject/Help/*.HxT
DocProject/Help/*.HxC
DocProject/Help/*.hhc
DocProject/Help/*.hhk
DocProject/Help/*.hhp
DocProject/Help/Html2
DocProject/Help/html
# Click-Once directory
publish/
# Publish Web Output
*.[Pp]ublish.xml
*.azurePubxml
# TODO: Comment the next line if you want to checkin your web deploy settings
# but database connection strings (with potential passwords) will be unencrypted
*.pubxml
*.publishproj
# NuGet Packages
*.nupkg
# The packages folder can be ignored because of Package Restore
**/packages/*
# except build/, which is used as an MSBuild target.
!**/packages/build/
# Uncomment if necessary however generally it will be regenerated when needed
#!**/packages/repositories.config
# Windows Azure Build Output
csx/
*.build.csdef
# Windows Store app package directory
AppPackages/
# Others
*.[Cc]ache
ClientBin/
[Ss]tyle[Cc]op.*
~$*
*~
*.dbmdl
*.dbproj.schemaview
*.pfx
*.publishsettings
node_modules/
bower_components/
# RIA/Silverlight projects
Generated_Code/
# Backup & report files from converting an old project file
# to a newer Visual Studio version. Backup files are not needed,
# because we have git ;-)
_UpgradeReport_Files/
Backup*/
UpgradeLog*.XML
UpgradeLog*.htm
# SQL Server files
*.mdf
*.ldf
# Business Intelligence projects
*.rdl.data
*.bim.layout
*.bim_*.settings
# Microsoft Fakes
FakesAssemblies/
# Node.js Tools for Visual Studio
.ntvs_analysis.dat
# Visual Studio 6 build log
*.plg
# Visual Studio 6 workspace options file
*.opt
/test/Etg.Yams.Test/Data/Exes/*.exe
================================================
FILE: Docs/Continuous_Integration.md
================================================
# Continuous Integration with YAMS and VSTS
In this tutorial, we will demonstrate how to use YAMS in a continuous integration environments. We will use VSTS as an example, but the concepts discussed can be easily adapted to another platform. We will also pair YAMS with cloud services to get the best of both words.
We will automate the deployment of two YAMS clusters:
* A Web Api cluster.
* An Orleans cluster.
We could deploy both applications to the same cluster, but we chose to use two clusters because that will allow us to scale the two clusters independently.
Finally, we will show how you can add support for multiples configuration environments (e.g. dev, prod) to your YAMS applications.
## Deploy YAMS
To deploy services with YAMS, the YAMS host itself need to be deployed to the virtual machines where the services will be deployed. We use Azure Cloud Services for this.
The [Deploy YAMS tutorial](Deploy_YAMS.md) tutorial shows how YAMS can be deployed to a cloud service.
### Multiple configuration environments
In order to support multiple configuration environments (e.g. dev, prod), we will add the environment name to the YAMS cluster properties. In the worker role shown in [Deploy YAMS tutorial](Deploy_YAMS.md), add the `EnvironmentName` cluster property as show below:
```csharp
string clusterId = "WebApi";
YamsConfig yamsConfig = new YamsConfigBuilder(
// mandatory configs
clusterId: clusterId,
instanceUpdateDomain: RoleEnvironment.CurrentRoleInstance.UpdateDomain.ToString(),
instanceId: RoleEnvironment.CurrentRoleInstance.Id,
applicationInstallDirectory: RoleEnvironment.GetLocalResource("LocalStoreDirectory").RootPath)
// optional configs
.SetCheckForUpdatesPeriodInSeconds(5)
.SetApplicationRestartCount(3)
.AddClusterProperty("EnvironmentName", RoleEnvironment.GetConfigurationSettingValue("EnvironmentName"))
.AddClusterProperty("DeploymentId", GetDeploymentId())
.Build();
```
For the above to work, you need to add the `EnvironmentName` to your cloud service `ServiceDefinition.csdef` and the corresponding `ServiceConfiguration.*.cscfg` files.
Notice that we have also added the `DeploymentId` as a cluster property and that we have named the cluster `WebApi` (we will take advantage of the `DeploymentId` property later in this tutorial).
### Multiple clusters
To host a second YAMS cluster in the same cloud service, simply add a second worker role to your solution. The second worker role will be used to host the cluster where Orleans is deployed, and the cluster id will be `Orleans`.
### Deploy with Visual Studio
If you followed the steps in [Deploy YAMS tutorial](Deploy_YAMS.md) and the steps above, you should be ready to deploy YAMS to a cloud service with two worker role, one hosting the Web Api and another hosting Orleans.
You have also configured the YAMS clusters so that the deployment id and the environment name are passed down to YAMS as cluster properties and available to be used as command line arguments to start YAMS applications. In fact, cluster properties can be used in the `AppConfig.json` file of a YAMS application and will be resolved to the actual value if referenced as follows: `${Cluster_Property_Name}` (e.g. ${EnvironmentName}). See [YAMS Overview](Overview.md) for more information about the `AppConfig.json` file.
Finally, deploy your YAMS clusters to the cloud service using visual studio. You will typically need to deploy the cloud service only once and then manage applications with YAMS.
## Deploy YAMS applications with VSTS
Now that the YAMS cluster is up and running, it's time to setup VSTS so that YAMS applications are automatically deployed.
Make sure that your WebApi and Orleans applications have corresponding `AppConfig.json` files and are configured so that the `EnvironmentName` and `DeploymentId` are passed as command line arguments as follows:
```json
{
"ExeName": "HelloService.WebApi.exe",
"ExeArgs": "${EnvironmentName} ${DeploymentId}"
}
```
```json
{
"ExeName": "HelloService.Orleans.exe",
"ExeArgs": "${EnvironmentName} ${DeploymentId}"
}
```
The applications can then load different configuration based on the `EnvironmentName` (this is quite easy to setup using `Microsoft.Extensions.Configuration` for example).
The `DeploymentId` is only passed down so it can be used as a silo name (don't worry about this if you are not using Orleans).
### Setup your build
Setup your VSTS build so that the build artifacts are as follows:
```
Build\drop\HelloService.WebApi\
Build\drop\HelloService.Orleans\
```
The directories above should contain all the binaries and configuration needed to start your applications.
### Setup VSTS
To deploy YAMS, we will use the YAMS powershell cmdlets.
* Add a `Download Package` task to your VSTS release definition and select the latest version of `Etg.Yams.Powershell`.
* Use `$(System.DefaultWorkingDirectory)/YamsPowershell` as a destination directory.
* Add an `Azure Powershell` task to your VSTS release definition and add the following to it:
Scripts Arguments:
```
-WorkingDir "$(System.DefaultWorkingDirectory)" -ConnectionString "$(StorageConnectionString)" -Version "1.0.$(Release.ReleaseId)"
```
Inline Scripts:
```powershell
Param(
[string]$ConnectionString,
[string]$Version,
[string]$WorkingDir
)
$BinDir = "$WorkingDir\Build\drop"
Import-Module $WorkingDir\YamsPowershell\content\Etg.Yams.Powershell.dll
Install-Applications -ConnectionString $ConnectionString -AppsIds "HelloService.WebApi","HelloService.Orleans" -ClustersIds "WebApi","Orleans" -BinariesPath "$BinDir\HelloService.WebApi","$BinDir\HelloService.Orleans\" -Versions $Version,$Version -WaitForDeploymentsToComplete $true
```
Note that this assumes that you already have a storage account configured for YAMS and that you have added `StorageConnectionString` variable to VSTS (or feel free to use any different way to propagate your connection string to the powershell script).
That's it!
All you need to do now is to configure your deployment triggers in VSTS (e.g. deploy on every check-in to master) and you should have 1-2 minute VSTS deployments!
## Add Support for VIP Swaps
In some cases, one may not feel confident using a rolling upgrade in a production environment because there is a chance that the deployed service will experience difficulties starting up. A popular approach to avoid such issues is to deploy first to a staging environment, test and warm up the deployment, and then perform a VIP swap.
YAMS does not have native support for VIP swaps but one can easily achieve VIP swaps with YAMS when combined with Azure cloud services. The trick is to use the cloud service deployment id as a prefix in the Yams cluster id. Follow the following steps to achieve this.
* Use the deployment id of your cloud service as a prefix to your YAMS cluster id when you start your worker role:
```csharp
string clusterId = $"{RoleEnvironment.GetConfigurationSettingValue("ClusterId")}_{RoleEnvironment.DeploymentId}";
```
* Use the same deployment id above in your VSTS task
```powershell
Param(
[string]$ConnectionString,
[string]$Version,
[string]$WorkingDir
)
$BinDir = "$WorkingDir\Build\drop"
Import-Module $WorkingDir\YamsPowershell\content\Etg.Yams.Powershell.dll
$DeploymentId = (Get-AzureDeployment -ServiceName $(ServiceName) -Slot Staging).DeploymentId
Install-Applications -ConnectionString $ConnectionString -AppsIds "NotificationService","NotificationService.Silo" -ClustersIds "FrontEnd_$(DeploymentId)","Orleans_$(DeploymentId)" -BinariesPath "$BinDir\NotificationService","$BinDir\NotificationService.Silo\" -Versions $Version,$Version -WaitForDeploymentsToComplete $true
```
With this setup, the YAMS applications will be deployed to the *Staging* slot instead of the *Production* slot. Once the service is deployed, warmed up and tested, simply VIP swap using the cloud service portal or a powershell VSTS task.
================================================
FILE: Docs/Contributor_Guide.md
================================================
# YAMS Contributor Guide
## How to debug YAMS?
To debug YAMS code, simply use the `Etg.Yams.Host` console app available in the Etg.Yams solution (Make `Etg.Yams.Host` a startup project and hit `F5`). You can then easily make changes to YAMS code and run the console app.
The `Etg.Yams.Host` console app will start a YAMS cluster with the following properties:
* ClusterId = "TestClusterId"
* InstanceId = "instance_0"
* Update domain = "0"
* The current directory (e.g. `Etg.Yams.Host\bin\Debug`) is where binaries will be installed.
* The storage account used by default is the development storage (change it as needed but make sure to not check in your connection string!).
Don't forget to submit a pull request when you're done fixing an issue or adding a new feature!
================================================
FILE: Docs/Deploy&Host_an_App_in_YAMS.md
================================================
# Overview
In this tutorial, we will create a simple application and deploy it to YAMS. We will learn the following:
* How to deploy an app for the first time.
* How to deploy multiple apps.
* How to update an app (to perform bug fixes or upgrades).
* How to deploy two versions of the same app side-by-side.
* How to remove or revert a deployment.
# Create an App
Let's create a simple web Api that we will later deploy to YAMS (**note** that any **exe** can be deployed to YAMS but we chose a Web Api in this example because we can interact with it). To deploy an app to YAMS, the app must contain an **exe** that can be used to start the app. Follow the steps below to create a web Api that can be started with an **exe**.
* Create a new *Console Application* project in visual studio and name it *WebApp*.
* Install the NuGet package `Microsoft.AspNet.WebApi.OwinSelfHost` to the *WebApp* project.
* Rename the `Program.cs` file to `App.cs` and add the following content to it:
```csharp
using System;
using System.Linq;
using System.Net;
using System.Net.Sockets;
namespace WebApp
{
public class App
{
public static string Id;
public static string Version;
public static string ClusterId;
static void Main(string[] args)
{
Id = args[0];
Version = args[1];
ClusterId = args[2];
string baseUrl = string.Format("http://{0}/{1}/", GetIpAddress(), Id);
Console.WriteLine("Url is: " + baseUrl);
// Start OWIN host
Microsoft.Owin.Hosting.WebApp.Start<Startup>(url: baseUrl);
Console.WriteLine("WebApp has been started successfully");
Console.ReadLine();
}
private static string GetIpAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
return host.AddressList.First(x => x.AddressFamily == AddressFamily.InterNetwork).ToString();
}
}
}
```
* Create a class called `Startup` and add the following to it:
```csharp
using System;
using System.Web.Http;
using Owin;
namespace WebApp
{
class Startup
{
// This code configures Web API. The Startup class is specified as a type
// parameter in the WebApp.Start method.
public void Configuration(IAppBuilder appBuilder)
{
// Configure Web API for self-host.
HttpConfiguration config = new HttpConfiguration();
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.EnsureInitialized();
appBuilder.UseWebApi(config);
}
}
}
```
* Create an `ApplicationController` class and add the following to it:
```csharp
using System.Web.Http;
using Newtonsoft.Json.Linq;
namespace WebApp
{
[RoutePrefix("application")]
public class ApplicationController : ApiController
{
[Route("info")]
public JObject GetInfo()
{
string json = string.Format(@"
{{
'Id': '{0}',
'Version': '{1}',
'Yams Cluster Id': '{2}'
}}
", App.Id, App.Version, App.ClusterId);
return JObject.Parse(json);
}
}
}
```
So far, we have created a simple web Api application. The app exposes an Api that allows one to obtain basic information such as the *id* and the *version* of the app.
Before deploying an application in YAMS, we need to add a YAMS specific configuration file to the root of the application.
* Add an `AppConfig.json` file to the root of the WebApp project.
* In the `AppConfig.json` file properties, under "Copy to Output Directory", select either "Copy Always" or "Copy if Newer".
* Add the following to the `AppConfig.json` file:
```json
{
"ExeName": "WebApp.exe",
"ExeArgs": "${Id} ${Version} ${ClusterId}"
}
```
Notice the use of `${symbol}` in the config file. The values of these symbols will be resolved by YAMS at runtime. The set of all supported symbols is available [here](Deploy_YAMS.md). In this case, we are passing the *id*, *version* and *cloud service deployment id* to the *WebApp.exe* which is expecting these arguments (see the `Main` function of the app).
Finally, build the app and make sure that the exe has been created and that the `AppConfig.json` file has been copied to the output.
# Deploy the App
YAMS relies on blob storage to download and deploy the binaries of an application. In fact, a YAMS cluster is associated with a storage account where all applications binaries are uploaded. See the [Deploy YAMS](Deploy_YAMS.md) tutorial to learn more on how to deploy a YAMS cluster.
To deploy **WebApp** to YAMS, follow the steps below:
* In the `applications` container (at the root of the YAMS blob storage), create `WebApp/1.0.0` directory.
* Upload the output of the *WebApp* project to the `applications/WebApp/1.0.0` blob directory.
* Tell YAMS to download and deploy the app to the cloud service by adding a corresponding entry in the `DeploymentConfig.json` file located at the root of the `applications` folder:
```json
{
"Applications":
[
{
"Id": "WebApp",
"Version": "1.0.0",
"TargetClusters": [ "MY_CLUSTER_ID" ]
}
]
}
```
The application should be up and running in a matter of seconds. To test it, use a web Api client (such as Postman) and run the following http request:
```
GET http://cloudservicename.cloudapp.net/WebApp/application/info
```
The result should look like the following:
```json
{
"Id": "WebApp",
"Version": "1.0.0",
"Yams Cluster Id": "MY_CLUSTER_ID"
}
```
Similarly, you can deploy as many apps as you want by adding the corresponding binaries in the blob storage and the associated entries in the `DeploymentConfig.json` file.
# Update a running app
Let's update the web app and add a new coin flip Api to it. To do so:
* Create a new `CoinFlipController`:
```csharp
using System;
using System.Web.Http;
namespace WebApp
{
[RoutePrefix("coinflip")]
public class CoinFlipController : ApiController
{
private static readonly Random Random = new Random();
[HttpGet]
[Route("next")]
public string Run()
{
if (Random.Next(2) == 0)
{
return "Heads";
}
return "Tails";
}
}
}
```
* Build the project.
* Upload the output of the build to the `applications/WebApp/1.1.0` blob directory.
* Update the version number in the `DeploymentConfig.json` file to `1.1.0` (this step will trigger the update).
The new version of **WebApp** should be running in YAMS in less than a minute. To test it, run the following http requests:
```
GET http://cloudservicename.net/WebApp/application/info
GET http://cloudservicename.net/WebApp/coinflip/next
```
# Running multiple versions of the same app side-by-side
YAMS supports running multiple versions of the same app side-by-side. However, the app must be designed in a way that supports running multiple versions side-by-side. For instance, our current **WebApp** has not been designed with that in mind. In fact, if we try to run two versions of **WebApp** side-by-side, they will both try to use the same **url** and one of them will fail.
To fix this problem, let's add the **version** of the app to the url. To do so, go to the `Main` function and replace
```csharp
string baseUrl = string.Format("http://{0}/{1}/", GetIpAddress(), Id);
```
with
```csharp
Version version = new Version(Version);
string apiVersion = string.Format("{0}.{1}", version.Major, version.Minor);
string baseUrl = string.Format("http://{0}/{1}/{2}", GetIpAddress(), Id, apiVersion);
```
To deploy the new version (let's say `2.0.0`) side-by-side with the currently running version (`1.1.0`), create and upload the `2.0.0` version as described in the previous section and add it to the `DeploymentConfig.json` file as follows:
```json
{
"Applications":
[
{
"Id": "WebApp",
"Version": "1.1.0",
"TargetClusters": [ "MY_CLUSTER_ID" ]
},
{
"Id": "WebApp",
"Version": "2.0.0",
"TargetClusters": [ "MY_CLUSTER_ID" ]
}
]
}
```
That's it! The two versions should be now happily running side-by-side.
# Removing or reverting a deployment
To remove an app from YAMS, simply remove the corresponding entry from the `DeploymentConfig.json` file. YAMS will terminate the corresponding process and remove the app. You can also delete the associated files from the blob storage if you are never going to use this app again or keep it there to preserve history of deployments and to allow reverts. In fact, to revert a deployment in YAMS, simply edit the `DeploymentConfig.json` file and replace the current version of the app (the version to be reverted) with the old version (the version to revert to).
# Advanced features
Yams has support for health monitoring and graceful shutdown of apps as described [here](../Docs/Overview.md#health-monitoring-and-graceful-shutdown). Note that you can choose to enable one or multiple features and apps within the same cluster can use different features.
## Monitored initialization
By default, Yams does not monitor the initialization of apps. In other words, when an app is deployed, the associated process is launched and then Yams assumes that the app is running and ready to receive requests. With the monitored initialization feature enabled, Yams would wait for the app to finish initialization before moving on to the next app (the app would notify Yams that it's done initializing through an IPC message).
To enable *monitored initialization* for a given app, the corresponding flag must be added to the `AppConfig.json` file as shown below:
```json
{
"ExeName": "MyProcess.exe",
"ExeArgs": "Foo Bar",
"MonitorInitialization": true
}
```
The app source code will also need to be updated so that the app can communicate with Yams (using IPC). Install the `Etg.Yams` NuGet package and modify the app source code so that Yams is notified when initialization is done, as shown in the code below:
```csharp
public static void Main(string[] args)
{
MainAsync(args).Wait();
}
private static async Task MainAsync(string[] args)
{
var yamsClientConfig = new YamsClientConfigBuilder(args).Build();
var yamsClientFactory = new YamsClientFactory();
IYamsClient yamsClient = yamsClientFactory.CreateYamsClient(yamsClientConfig);
await Task.WhenAll(yamsClient.Connect(), Initialize());
await yamsClient.SendInitializationDoneMessage();
// ...
```
## Heart beats
With this feature enabled, the app is expected to send heart beat messages to Yams at steady intervals. If heart beats are not received in time, errors will be logged (more complex handling will be added in the future). To enable this feature, update the `AppConfig.json` and your app source code as shown below:
```json
{
"ExeName": "MyProcess.exe",
"ExeArgs": "Foo Bar",
"MonitorHealth": true
}
```
```csharp
public static void Main(string[] args)
{
MainAsync(args).Wait();
}
private static async Task MainAsync(string[] args)
{
var yamsClientConfig = new YamsClientConfigBuilder(args).Build();
var yamsClientFactory = new YamsClientFactory();
IYamsClient yamsClient = yamsClientFactory.CreateYamsClient(yamsClientConfig);
await Task.WhenAll(yamsClient.Connect(), Initialize());
while (true)
{
await Task.Delay(heartBeatPeriod);
await yamsClient.SendHeartBeat();
}
```
## Graceful Shutdown
When graceful shutdown is enabled for a given app, Yams will deliver an event to the app and allow it a configurable amount of time to exit gracefully before closing/killing it. The graceful shutdown event will be delivered through the `YamsClient` as a normal C# event. To enable this feature, update the `AppConfig.json` and your app source code as shown below:
```json
{
"ExeName": "MyProcess.exe",
"ExeArgs": "Foo Bar",
"GracefulShutdown": true
}
```
```csharp
public static void Main(string[] args)
{
MainAsync(args).Wait();
}
private static async Task MainAsync(string[] args)
{
var yamsClientConfig = new YamsClientConfigBuilder(args).Build();
var yamsClientFactory = new YamsClientFactory();
IYamsClient yamsClient = yamsClientFactory.CreateYamsClient(yamsClientConfig);
await Task.WhenAll(yamsClient.Connect(), Initialize());
bool exitMessageReceived = false;
yamsClient.ExitMessageReceived += (sender, eventArgs) =>
{
exitMessageReceived = true;
};
while (!exitMessageReceived)
{
await DoWork();
}
```
# Source code
The source code associated with this tutorial can be found in the [Samples/WebApp](../Samples/WebApp) directory.
================================================
FILE: Docs/Deploy_Orleans_App_in_YAMS.md
================================================
# Overview
In this tutorial, we will explain how to create and deploy an Orleans application in YAMS. We will also explain how to connect to the Orleans application from a Web Api application.
# Prerequisites
You must deploy YAMS using the multiple cluster sample in order to deploy Orleans applications. One cluster will be used for the client and one cluster will be used for the silos. It's recommended that you read the [Deploy and Host an App in YAMS tutorial](Deploy&Host_an_App_in_YAMS.md) before reading this tutorial.
# Create the Orleans application
Follow the *Hello World* tutorial described in Orleans [My First Orleans Application](http://dotnet.github.io/orleans/Step-by-step-Tutorials/My-First-Orleans-Application) to create a simple Orleans application that will be used in the rest of this tutorial.
Once you have the app ready, follow the steps below to deploy the app in YAMS:
* Go to the **SiloHost** console application project and remove any client related code from the `Program.cs` file.
* Open the `Program.cs` file and add the following code to configure the silo:
```csharp
private static int StartSilo(string[] args)
{
// define the cluster configuration
var config = new ClusterConfiguration();
config.Globals.LivenessType = GlobalConfiguration.LivenessProviderType.AzureTable;
config.Globals.ReminderServiceType = GlobalConfiguration.ReminderServiceProviderType.AzureTable;
config.Globals.DataConnectionString = "MY_DATA_CONNECTION_STRING";
config.AddMemoryStorageProvider();
config.AddAzureTableStorageProvider("AzureStore");
config.Defaults.DefaultTraceLevel = Severity.Error;
config.Defaults.Port = 100;
config.Defaults.ProxyGatewayEndpoint = new IPEndPoint(config.Defaults.Endpoint.Address, 101);
hostWrapper = new OrleansHostWrapper(config, args);
return hostWrapper.Run();
}
```
* Add the YAMS `AppConfig.json` file to the **SiloHost** project. The content of the `AppConfig.json` file is as follows:
```json
{
"ExeName": "SiloHost.exe",
"ExeArgs": "deploymentid=${Id}_${Version.Major}.${Version.Minor}_${DeploymentId}"
}
```
The argument for the `SiloHost.exe` executable is the Orleans deployment id for this application which must be the same across all role instances in the cloud service. In our case, the value of this argument will be resolved to `helloworld.orleans_1_0_MY_YAMS_BACKEND_CLUSTER_ID` and `MY_YAMS_BACKEND_CLUSTER_ID` will be a combination of the Cloud Service's deployment id and the Worker Role name. This deploymentId is used by Orleans to communicate between silos running on different role instances. It is also used by the client app (that we will describe later in this tutorial) to connect to the Orleans cluster.
* In the `AppConfig.json` file properties, under "Copy to Output Directory", select either "Copy Always" or "Copy if Newer".
Notice that we only used the major and minor versions (not the build version) in the silo name and the deploymentId. This will allow us to perform bug fixes to the silo and re-deploy it quickly using YAMS without affecting the clients of our app.
* Finally, build the project and make sure that `SiloHost.exe` and `AppConfig.json` are copied to the build output directory and have the correct content.
# Create the Orleans client application
Let's now create a Web app that connects to the Orleans silo, calls the `HelloGrain.SayHello()` and prints the returned message to the output.
Follow the [Deploy and Host an App in YAMS tutorial](Deploy&Host_an_App_in_YAMS.md) to create a Web app. To connect to the Orleans app from the web app, follow the steps below:
* Install `Microsoft.Orleans.Client` NuGet package to the Web app project.
* Install `Microsoft.Orleans.OrleansAzureUtils` NuGet package to the `SiloHost` console application project.
* Add the following at the end of the `Main()` function (right before `Console.ReadLine()`):
```csharp
var config = new ClientConfiguration();
config.GatewayProvider = ClientConfiguration.GatewayProviderType.AzureTable;
config.DeploymentId = "hello.orleans_1.0_MY_YAMS_BACKEND_CLUSTER_ID";
config.DataConnectionString = "MY_DATA_CONNECTION_STRING";
config.DefaultTraceLevel = Severity.Error;
// Attempt to connect a few times to overcome transient failures and to give the silo enough
// time to start up when starting at the same time as the client (useful when deploying or during development).
const int initializeAttemptsBeforeFailing = 5;
int attempt = 0;
while (true)
{
try
{
GrainClient.Initialize(config);
Console.WriteLine("Client initialized");
break;
}
catch (SiloUnavailableException e)
{
attempt++;
if (attempt >= initializeAttemptsBeforeFailing)
{
throw;
}
Thread.Sleep(TimeSpan.FromSeconds(2));
}
}
```
It's **very important** that the `DeploymentId` and the `DataConnectionString` used above matches the ones that were used in the `helloworld.orleans` app.
* Reference the Orleans interfaces project from the **WebApp** project.
* Create an `OrleansHelloController` (see below) and add it to the **WebApp** project.
```csharp
namespace WebApp
{
[RoutePrefix("orleans")]
public class OrleansHelloController : ApiController
{
[HttpGet]
[Route("hello")]
public async Task<string> SayHello()
{
var helloGrain = GrainClient.GrainFactory.GetGrain<IHelloGrain>(0);
return await helloGrain.SayHello();
}
}
}
```
* Add a `AppConfig.json` file to the **WebApp** project. The content of the `AppConfig.json` is as follows:
```json
{
"ExeName": "WebApp.exe",
"ExeArgs": "${Id} ${Version} ${DeploymentId}"
}
```
* In the `AppConfig.json` file properties, under "Copy to Output Directory", select either "Copy Always" or "Copy if Newer".
* Finally, build the project and make sure that `WebApp.exe` and `AppConfig.json` are copied to the build output directory and have the correct content.
# Deploy the Orleans app and the web app to YAMS
To deploy both apps to YAMS follow the steps below:
* Upload the build output of **OrleansHost** build output to the `applications/hello.orleans/1.0.0` blob directory.
* Upload the build output of **WebApp** build output to the `applications/hello.webapp/1.0.0` blob directory.
* Add the following content to the **DeploymentConfig.json** file:
```json
{
"Applications":
[
{
"Id": "hello.orleans",
"Version": "1.0.0",
"TargetClusters": [ "MY_YAMS_BACKEND_CLUSTER_ID" ]
},
{
"Id": "hello.webapp",
"Version": "1.0.0",
"TargetClusters": [ "MY_YAMS_FRONTEND_CLUSTER_ID" ]
},
]
}
```
Give YAMS some time to pick up the apps (typically less than a minute but in this case it'll probably take a bit longer because the Web app needs to connect to the Orleans silo) and run the following requests:
```
GET http://cloudservicename.cloudapp.net/hello.webapp/1.0/orleans/hello
```
You should get the output below which indicates that both the Web App and the Orleans App are running in YAMS.
```
"Hello World!"
```
# Source code
The source code associated with this tutorial can be found in the [Samples/OrleansApp](../Samples/OrleansApp) directory.
================================================
FILE: Docs/Deploy_YAMS.md
================================================
# Overview
This tutorial will show you how to configure YAMS and deploy it to a cloud service. If you already have a YAMS cluster deployed, skip to [Deploy and Host an App in YAMS](Deploy&Host_an_App_in_YAMS.md) tutorial.
## Deploy YAMS
1. Create a cloud service and add a Worker Role to it.
2. Install the latest version of `Etg.Yams` from the NuGet gallery to the worker role.
3. Add the following private members to your `WorkerRoles.cs` class:
```csharp
private IYamsService _yamsService;
private static string GetYamsClusterId()
{
if (!RoleEnvironment.IsAvailable || RoleEnvironment.IsEmulated)
{
return "testdeploymentid";
}
return RoleEnvironment.DeploymentId;
}
```
4. Replace the content of the `RunAsync` method with the following:
```csharp
private async Task RunAsync(CancellationToken cancellationToken)
{
YamsConfig yamsConfig = new YamsConfigBuilder(
// mandatory configs
clusterId: GetYamsClusterId(),
instanceUpdateDomain: RoleEnvironment.CurrentRoleInstance.UpdateDomain.ToString(),
instanceId: RoleEnvironment.CurrentRoleInstance.Id,
applicationInstallDirectory: RoleEnvironment.GetLocalResource("LocalStoreDirectory").RootPath)
// optional configs
.SetCheckForUpdatesPeriodInSeconds(5)
.SetApplicationRestartCount(3)
.Build();
_yamsService = YamsServiceFactory.Create(yamsConfig,
deploymentRepositoryStorageConnectionString: RoleEnvironment.GetConfigurationSettingValue("StorageDataConnectionString"),
updateSessionStorageConnectionString: RoleEnvironment.GetConfigurationSettingValue("StorageDataConnectionString"));
try
{
Trace.TraceInformation("Yams is starting");
await _yamsService.Start();
Trace.TraceInformation("Yams has started. Looking for apps with clusterId:" + GetYamsClusterId());
}
catch (Exception e)
{
Trace.TraceError($"Failed to start the Yams cluster {GetYamsClusterId()}", e);
return;
}
while (!cancellationToken.IsCancellationRequested)
{
await Task.Delay(1000);
}
}
```
5. Add the following configuration to your `ServiceDefinition.csdef`
```xml
<WorkerRole name="YamsWorkerRole" vmsize="Small">
<!-- Make sure that YAMS has elevated permissions -->
<Runtime executionContext="elevated" />
<ConfigurationSettings>
<!--blob storage connection string needed so that Yams can access the deployment storage -->
<Setting name="StorageDataConnectionString" />
</ConfigurationSettings>
<LocalResources>
<!--Needed to tell Yams where to install apps -->
<LocalStorage name="LocalStoreDirectory" cleanOnRoleRecycle="false" />
</LocalResources>
</WorkerRole>
```
Don't forget to add the corresponding values to your `ServiceConfiguration.Cloud.cscfg` and `ServiceConfiguration.Local.cscfg`
6. Configure EndPoints to be used by YAMS apps
To allow applications to access endpoints, YAMS must register those endpoints in Azure when the cloud service containing YAMS is deployed. Fortunately, it is possible in Azure to register a range of endpoints. To do so, add the following to the **ServiceConfiguration.csdef** file:
```xml
<Endpoints>
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="your-certificate.net"/>
<InputEndpoint name="HttpIn" protocol="http" port="80"/>
<InternalEndpoint name="TcpEndpoints" protocol="tcp">
<FixedPortRange min="81" max="400"/>
</InternalEndpoint>
</Endpoints>
```
In this case, port 443 will be available for **https** connections, port 80 will be available for **http** connections and all ports from 81 to 400 will be open for **tcp** connections.
7. Bind SSL Certificate
If you're using HTTPS, you probably want to bind an SSL certificate to your 443 port.
To Do so in your WorkerRole, simply add the following to your **ServiceConfiguration.csdef** file:
```xml
</Certificates>
<Startup>
<Task commandLine="Scripts\BindSSLCertificate.cmd" executionContext="elevated" taskType="simple">
<Environment>
<Variable name="IsEmulated">
<RoleInstanceValue xpath="/RoleEnvironment/Deployment/@emulated" />
</Variable>
</Environment>
</Task>
</Startup>
```
The corresponding script is shown below:
```
IF NOT DEFINED IsEmulated SET IsEmulated=false
IF %IsEmulated%==true (
exit /b 0
)
netsh http delete sslcert ipport=0.0.0.0:443
netsh http add sslcert ipport=0.0.0.0:443 appid={MY_APP_ID} certhash=MY_CERT_HASH
```
To make sure the script is copied to your package, simply go to file properties in Visual Studio and set the `Copy to Output Directory` property to `Copy if newer` or `Copy always`.
8. Publish the cloud service to Azure and start using YAMS. You should only need to publish the cloud service hosting YAMS once.
## Deployment Storage
YAMS relies on Azure blob storage to deploy applications. It uses the `dataConnectionString` provided in the `YamsConfig` to connect to the appropriate blob storage.
YAMS expects to find a Storage Container called `applications` at the root of the blob storage. The `applications` container must contain a **DeploymentConfig.json** file that describes the applications to be deployed. The **DeploymentConfig.json** file looks like the following:
```json
{
"Applications":
[
{
"Id": "hello.webapi",
"Version": "1.0.1",
"TargetClusters": [ "YAMS_CLUSTER_ID" ]
},
{
"Id": "hello.backend",
"Version": "1.0.0",
"TargetClusters": [ "YAMS_CLUSTER_ID" ]
},
]
}
```
In this case, the application `hello.webapi`, version `1.0.1` will be deployed to the cloud service with deployment Id *"YAMS_CLUSTER_ID"*. The binaries of the application should be available in the blob storage at the path `applications/hello.webapi/1.0.1`.
The blob storage content in the example above will look as follows:
```
applications
|___ hello.backend
| |___ 1.0.0
|___ hello.webapi
| |___ 1.0.1
|___ DeploymentConfig.json
```
YAMS will download all the applications in the blob storage (that are listed in the **DeploymentConfig.json** file) to each role instance of the cloud service and start the applications on all instances. To start an application, YAMS reads the **AppConfig.json** (that must be available at the root of each application) to figure out the **exe** name and arguments for that specific application.
The **AppConfig.json** file looks as follows:
```json
{
"ExeName": "WebApiHost.exe",
"ExeArgs": "-p Https --appName=${Id}"
}
```
In this case, YAMS will use the following command to start the application:
```
WebApiHost.exe -p Https --appName=hello.webapi
```
Notice the `${Id}` symbol in the `ExeArgs` that was substituted with the actual **id** of the application. Other available symbols are (symbols are resolved at runtime by YAMS):
* ${Version}
* ${Version.Major}
* ${Version.Minor}
* ${Version.Build}
* ${DeploymentId}: the cloud service deployment id.
* ${InstanceId}: the current role instance id.
================================================
FILE: Docs/Overview.md
================================================
# YAMS Overview
The [Microsoft Azure cloud services](https://azure.microsoft.com/en-us/services/cloud-services/) platform allows developers to deploy and host highly available, reliable and scalable microservices and applications in the cloud. The platform handles creating and managing VMs, load balancing, scaling (and auto-scaling), Virtual IP (VIP) swap and more.
Typically, an application is first deployed to a staging environment for testing. If testing is successful, the application is promoted to the production environment by performing a VIP swap. With each environment (e.g. staging and production) is associated at least one VM where the application will be running. For real world applications, several VMs are usually needed to handle traffic.
A microservices-based application is usually composed of a large number of microservices. Each microservice can be independently deployed, hosted, scaled and versioned. Microservices within the same application are loosely coupled and communicate with each other via HTTP / REST. As a result, microservices within the same application can also be developed in different programming languages.
To deploy such a Microservices-based application to Azure using the Azure cloud services platform, a cloud service is needed to deploy and host each microservice. Given that each cloud service requires at least one VM (usually more), the cost can quickly become unreasonable for a large number of microservices.
**YAMS** (Yet Another Microservices Solution) is a library that can be used to deploy and host microservices on premises, in Azure, or on other cloud service platforms. It offers the following features:
* **Quick deployments** of microservices to any target environment (~1 minute deployments to Azure).
* **Sharing infrastructure** (multiple microservices can be deployed to the same on premises or cloud service).
* **Scaling microservices independently**.
* **Versioning** of microservices, quick **updates**, **reverts**, etc.
* Support for **Upgrade Domains** to minimize (and potentially eliminate) application downtime during updates, including first-class support for **Azure Upgrade Domains**.
* Microservices can be developed in **any programming language** and deployed with YAMS (as long as your service can be started with an exe).
* **Health monitoring** and **graceful shutdown** of microservices.
YAMS has first-class support for deploying applications from Azure **blob storage**, but with its pluggable storage architecture, other providers such as SQL Server or file storage can be created and plugged in as well.
To deploy an application to a YAMS cluster, simply drop the binaries of the application into YAMS storage. The binaries are then picked-up by YAMS, deployed to all VMs in the cluster, and then launched.
# How does it work?
Yams itself is deployed either as a cloud service to Azure, on another cloud service platform, or on premises (we call it a Yams cluster). A Yams cluster is associated with a deployment storage (e.g. blob storage) where the binaries of microservices are deployed (note that *microservices* in Yams are often referred to as *applications* or simply *apps*). Yams periodically scans its deployment storage for updates.
## The deployment storage structure
The *applications* in deployment storage can be organized with the following structure:
```
applications
|___ app1
| |___ 1.0.0
|___ app2
| |___ 1.0.0
| |___ 1.0.1
|___ DeploymentConfig.json
```
Depending on what kind of storage provider is being used, these could be folders in a blob- or file-system-based deployment storage provider, columns in a relational database table, etc.
The `DeploymentConfig.json` file contains information about what application should be deployed and where. It has the following structure:
```json
{
"Applications":
[
{
"Id": "app1",
"Version": "1.0.0",
"TargetClusters": [ "YAMS_CLUSTER_ID" ]
},
{
"Id": "app2",
"Version": "1.0.1",
"TargetClusters": [ "YAMS_CLUSTER_ID", "YAMS_CLUSTER_ID_OTHER" ]
},
]
}
```
The `TargetClusters` field identifies the Yams clusters where an application should be deployed.
## Deploying Yams to a cloud service
Yams can be deployed to Azure like any typical cloud service. The [Deploy YAMS tutorial](Deploy_YAMS.md) explains the steps needed to deploy Yams to Azure.
## Scanning blob storage
When a Yams cluster is deployed to a cloud service, each instance in the cluster reads the `DeploymentConfig.json` file and deploy all apps that have the corresponding `ClusterId` (typically the deployment id of the cloud service where the Yams cluster is deployed). Then, periodically, each Yams instance scans the `DeploymentConfig.json` file for changes and takes the appropriate actions. There are three types of changes that can occur:
1. **An application is added**
2. **An application is removed**
3. **An application is updated**
Note that the operations described below can be performed using Yams Powershell interface. Yams Powerhsell cmdlets are available [here](../src/Etg.Yams.Powershell) and can be downloaded using the NuGet package [Etg.Yams.Powershell](https://www.nuget.org/packages/Etg.Yams.Powershell/).
### Adding an application
This occurs when a new application or a new version of an application is added to the `DeploymentConfig.json` file. Each Yams instance downloads the app's binaries to the VM where it's running and starts the application using the exe available with the binaries. In fact, each Yams application (i.e. microservice) contains an `AppConfig.json` file that describes how the application can be started. The `AppConfig.json` file has the following structure:
```json
{
"ExeName": "Foo.exe",
"ExeArgs": "--appName=${Id} --arg2 10"
}
```
Notice the ${Id} variable in the ExeArgs which will be substituted with the actual id of the application at runtime. Other available variables are:
* ${Version}
* ${Version.Major}
* ${Version.Minor}
* ${Version.Build}
* ${ClusterId}: the Yams cluster id.
* ${InstanceId}: the current VM instance id.
You can also pass custom variables to Yams using two ways:
1. Add properties to your cluster at startup:
```csharp
YamsConfig yamsConfig = new YamsConfigBuilder(
// mandatory configs
clusterId: clusterId,
instanceUpdateDomain: RoleEnvironment.CurrentRoleInstance.UpdateDomain.ToString(),
instanceId: RoleEnvironment.CurrentRoleInstance.Id,
applicationInstallDirectory: RoleEnvironment.GetLocalResource("LocalStoreDirectory").RootPath)
// optional configs
.AddClusterProperty("EnvironmentName", RoleEnvironment.GetConfigurationSettingValue("EnvironmentName"))
.AddClusterProperty("DeploymentId", GetDeploymentId())
.Build();
```
Properties added using `AddClusterProperty` will be available to all apps. The drawback of this approach is that it requires a cluster restart to add new properties. The second approach below only requires modifying the `DeploymentConfig.json`.
2. Add cluster properties to your app in the `DeploymentConfig.json` (this can be done using `Install-Applications` Powershell cmdlet):
```json
{
"Applications":
[
{
"Id": "app1",
"Version": "1.0.0",
"TargetClusters": [ "YAMS_CLUSTER_ID" ],
"Properties":
{
"EnvironmentName": "Dev"
}
},
{
"Id": "app2",
"Version": "1.0.1",
"TargetClusters": [ "YAMS_CLUSTER_ID", "YAMS_CLUSTER_ID_OTHER" ],
"Properties":
{
"EnvironmentName": "Dev"
}
},
]
}
```
Note that Yams supports running multiple versions of the same app side-by-side. Please see the [Deploy and Host an App in YAMS tutorial](Deploy&Host_an_App_in_YAMS.md) to learn more about this feature.
### Removing an application
This occurs when an application or a version of an application is removed from the the `DeploymentConfig.json` file. Each Yams instance terminates the process associated with the application.
### Updating an application
This occurs when the version of an existing application has changed in the `DeploymentConfig.json` file (this includes upgrades and downgrades). Each Yams instance removes the old version of the application and then adds the new version.
Yams supports **Azure Upgrade Domains** to minimize (and potentially eliminate) application downtime during updates. In fact, each Yams instance (VM) in the Yams cluster is associated with an **upgrade domain** and only VMs with the same upgrade domain can be updated simultaneously. When a Yams instance attempts to update an application, it checks first if the application is being updated on another Yams instance with a different upgrade domain. If that's the case, the Yams instance discards the update and attempts again at the next blob storage scan; until it eventually performs the update.
Note that if an update fails, Yams will not try to revert back to the old version. However, Yams will keep trying to perform the update at every cycle (every time it checks for updates) and will log errors if the installation fails. Yams uses `System.Diagnostics.Trace` to log errors which can be re-routed to blob storage or other locations by configuring the appropriate trace listener.
To revert a deployment, simply edit the `DeploymentConfig.json` file and replace the current version of the app (the version to be reverted) with the old version (the version to revert to).
## Monitoring YAMS Deployments
Similarly to the `DeploymentConfig.json` blob that instructs YAMS on what applications to deploy, YAMS exposes status blobs that expose the current status of the YAMS cluster to the outside world (for monitoring and visualization purposes).
When using blob storage, the deployment status blobs are published at:
```
applications/status/clusters/clusterName/instances/
```
The blob storage deployment repository looks as follows:
```
applications
|___ app1
| |___ 1.0.0
|___ app2
| |___ 1.0.1
|
|___ DeploymentConfig.json
|
|___ status
| |___ clusters
| |___ clusterName
| |___ instances
| |___ instance_1
| |___ instance_2
| |___ ...
| |___ instance_n
```
`instance_i` is the id of a given node in the cluster (aka instance id). The instance id is chosen when YAMS itself is deployed (e.g. when using a cloud service to deploy YAMS, the instance ids from the cloud service are passed down to YAMS). The content of the `instance_i` blob is as follows:
```json
{
"Applications": [
{
"Id": "app1",
"Version": "1.0.0",
"ClusterId": "MY_CLUSTER_ID",
"InstanceId": "instance_i",
"UtcTimeStamp": "2017-10-13T02:48:17.0168224Z"
},
{
"Id": "app2",
"Version": "1.0.1",
"ClusterId": "MY_CLUSTER_ID",
"InstanceId": "instance_i",
"UtcTimeStamp": "2017-10-13T02:48:17.0168224Z"
}
]
}
```
The above instance status confirms that the listed applications are currently running in the YAMS cluster as of `UtcTimeStamp`. The `UtcTimeStamp` is updated by YAMS every time YAMS checks for updates (default is 5 seconds).
* The `UtcTimeStamp` is updated periodically even if the app has not been updated.
* If an app is removed from the cluster, it will removed from the instance status blob.
* If the `UtcTimeStamp` corresponding to a given app is old, it's an indication that the YAMS instance is experiencing issues.
* Usually, all `UtcTimeStamp` values in the blob corresponding to a given instance are equal.
In addition to providing information about the status of the cluster, the deployment status blob can be used to monitor the health of YAMS nodes.
Another main use case of the deployment status feature is to allow continueous deployment tools (e.g. VSTS) to ensure that the new version of a given application is up and running before finishing the deployment.
The deployment status can be accessed using Powershell as follows:
```powershell
Get-DeploymentStatus -ConnectionString "MyConnectionString"
```
## Health monitoring of applications and graceful shutdown
Apps deployed with Yams can optionally enable health monitoring and/or graceful shutdown. Yams uses inter-process-communication (currently [named pipes](https://msdn.microsoft.com/en-us/library/bb546085(v=vs.110).aspx)) to communicate with apps.
There are three features available:
* *Monitored initialization*: Yams waits for the app to finish initialization before considering it ready to receive requests. If an app takes longer than expected to finish initialization (the timeout is configurable), it's considered unhealthy and is killed.
* *Monitored heart beats*: With this feature enabled, Yams expects to receive heart beats from apps at steady intervals. If a heart beat is not received in time, an error is logged (more complex handling will be added in the future).
* *Graceful shutdown*: A event is sent to the app to signal shutdown. If the app does not exit gracefully in time (the timeout is configurable), the app will be closed or killed.
Note that each of these features can be enabled/disabled separately. In addition, apps running within the same cluster can choose to enable/disable different features.
The [Yams Client API](../src/Etg.Yams.Client/IYamsClient.cs) can be used by apps to communicate with Yams. See [Deploy and host applications in YAMS tutorial](../Docs/Deploy&Host_an_App_in_YAMS.md) to learn how you can enable these features (one ore more features can be enabled at a time).
## Sharing infrastructure
One of the main goals of Yams is sharing infrastructure to reduce cost. In fact, some microservices consume little resources and can be deployed alongside other microservices. In addition, sharing infrastructure reduces the cost of over-provisioning resources. To illustrate this, consider an application composed of two microservices. Each microservice requires 2 VMs at normal operation load and 4 VMs at peak time. If each microservice is deployed separately, 8 VMs are needed in total (4 VMs per microservice). However, in practice, the peak time resources are over estimated and the peak time of one microservice does not necessarily overlap with the peak time of another microservice. If the same VMs are shared by both microservices and peak times are not likely to overlap, 6 VMs can be sufficient for both microservices (which saves us 2 VMs). In fact, this strategy works better for a large number of microservices where the probability of all microservices peaking at the same time decreases with the number of microservices and as a result, sharing infrastructure can result in large savings.
Another use case where sharing infrastructure can result in large savings is in testing environments. In fact, without sharing infrastructure, at least one additional VM is needed for testing each microservice. Considering that testing (such as running integration and end to end tests) doesn't have high performance requirements and that microservices are not all tested at the same time, using a pool of shared VMs for testing can significantly reduce the number of required VMs.
To deploy multiple apps to the same Yams cluster, simply use the same cluster id as shown below:
```
{
"Applications":
[
{
"Id": "app1",
"Version": "1.0.0",
"TargetClusters": [ "cluster_1_id" ]
},
{
"Id": "app2",
"Version": "1.0.1",
"TargetClusters": [ "cluster_1_id" ]
},
]
}
```
### Scaling microservices independently
Even though sharing VMs can result in large cost savings, the number of microservices that can coexist on the same VM is limited due to memory constraints. In fact, if a pool of VMs is shared by several microservices, each VM must have a total amount of memory that is the sum of the amounts of memory required for each microservice. Obviously, this doesn't scale very well.
To address this issue, microservices can be deployed to different Yams clusters depending on the requirements of each microservice. In the following example, `Microservice1` requires a dedicated VM while `Microservice2` and `Microservice3` can be deployed to the same VM.
```
{
"Applications":
[
{
"Id": "Microservice1",
"Version": "1.0.0",
"TargetClusters": [ "cluster_1_id" ]
},
{
"Id": "Microservice2",
"Version": "1.0.1",
"TargetClusters": [ "cluster_2_id" ]
},
{
"Id": "Microservice3",
"Version": "2.0.0",
"TargetClusters": [ "cluster_2_id" ]
},
]
}
```
In the above case, CPU resources needed for `Microservice2` and `Microservice3` are scaled together (by scaling the number of VMs in cluster 2) while `Microservice1` is scaled independently (cluster 1).
================================================
FILE: Docs/YAMS_Storage.md
================================================
# YAMS Storage Tutorial
This tutorial demonstrates the use of the `IDeploymentRepository` Api which can be used to fully control the Yams Storage. It provides capabilities such as downloading and uploading of application binaries, and the manipulation of the `DeploymentConfig.json` file. In fact, the Api completely decouples users from Blob storage and from the `DeploymentConfig.json` content and format.
* Create a proxy to the Yams storage
```csharp
IDeploymentRepository deploymentRepository = BlobStorageDeploymentRepository.Create("my_data_connection_string");
```
* Fetch the DeploymentConfig
```csharp
DeploymentConfig deploymentConfig = await deploymentRepository.FetchDeploymentConfig();
// DeploymentConfig implements IEnumerable.
foreach(AppDeploymentConfig appDeploymentConfig in deploymentConfig)
{
AppIdentity appIdentity = appDeploymentConfig.AppIdentity;
IEnumerable<string> targetClusters = appDeploymentConfig.TargetClusters;
}
```
* Deploy a new application
```csharp
AppIdentity appIdentity = new AppIdentity("AppId", "1.0.0");
// Upload the application binaries
await deploymentRepository.UploadApplicationBinaries(appIdentity, localBinariesDirPath, ConflictResolutionMode.FailIfBinariesExist);
// Update the DeploymentConfig. Note that the DeploymentConfig class is immutable
DeploymentConfig deploymentConfig = await deploymentRepository.FetchDeploymentConfig();
deploymentConfig = deploymentConfig.AddApplication(appIdentity, "yams_cluster_id");
// The application will only be deployed to the cluster when the DeploymentConfig is published
await deploymentRepository.PublishDeploymentConfig(deploymentConfig);
```
* Update an application
```csharp
// Upload the new binaries
await deploymentRepository.UploadApplicationBinaries(newAppIdentity, localBinariesDirPath, ConflictResolutionMode.FailIfBinariesExist);
// Fetch and update the DeploymentConfig
DeploymentConfig deploymentConfig = await deploymentRepository.FetchDeploymentConfig();
deploymentConfig = deploymentConfig.RemoveApplication(oldAppIdentity, "yams_cluster_id");
deploymentConfig = deploymentConfig.AddApplication(newAppIdentity, "yams_cluster_id");
// The update will be performed when the new DeploymentConfig is published
await deploymentRepository.PublishDeploymentConfig(deploymentConfig);
// You can also cleanup the old binaries if you're not planing to revert back to it in the future.
await deploymentRepository.DeleteApplicationBinaries(oldAppIdentity);
```
* Remove an application
```csharp
// Update the DeploymentConfig
DeploymentConfig deploymentConfig = await deploymentRepository.FetchDeploymentConfig();
// Remove the app from the DeploymentConfig
deploymentConfig = deploymentConfig.RemoveApplication(appIdentity, "yams_cluster_id");
// The app will be shutdown when the DeploymentConfig is published
await deploymentRepository.PublishDeploymentConfig(deploymentConfig);
// You can also cleanup the old binaries if you're not planing to revert back to it in the future.
await deploymentRepository.DeleteApplicationBinaries(appIdentity);
```
* Other DeploymentConfig Apis
```csharp
// Get the list of apps Ids
IEnumerable<string> appIds = deploymentConfig.ListApplications();
// Get the list of applications deployed to a given yams cluster
appIds = deploymentConfig.ListApplications("yams_cluster_id");
// Get the list of versions of a given app
IEnumerable<string> versions = deploymentConfig.ListVersions("MyAppId");
// Get the list of versions of a given app that are deployed on a given Yams cluster
versions = deploymentConfig.ListVersions("myAppId", "yams_cluster_id");
// List the yams clusters where an app is deployed
IEnumerable<string> clusterIds = deploymentConfig.ListClusters("MyAppId");
// List the yams clusters where a version of an app is deployed
clusterIds = deploymentConfig.ListClusters(new AppIdentity("MyAppId", "1.0.0"));
// Add a application to the DeploymentConfig.json
deploymentConfig.AddApplication(new AppIdentity("AppId", "2.0.0"), "yams_cluster_id");
// Remove an application, a specific version or a specific cluster:
deploymentConfig.RemoveApplication("MyAppId");
deploymentConfig.RemoveApplication(new AppIdentity("MyAppId", "1.0.0"));
deploymentConfig.RemoveApplication(new AppIdentity("MyAppId", "1.0.0"), "yams_cluster_id");
```
================================================
FILE: Etg.Yams.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams", "src\Etg.Yams\Etg.Yams.csproj", "{E1A6854F-6C0D-4F93-9B8D-D6981727D15B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Test", "Test", "{2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureTestUtils", "test\AzureTestUtils\AzureTestUtils.csproj", "{84C08621-2C78-4B19-9454-7B9019E68326}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HangingProcess", "test\HangingProcess\HangingProcess.csproj", "{1DD27CAF-AC19-4674-A42B-F15260929BAF}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SuicidalProcess", "test\SuicidalProcess\SuicidalProcess.csproj", "{80A3B3BD-8D2F-471A-A198-576772FAA048}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestProcess", "test\TestProcess\TestProcess.csproj", "{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Core.Test", "test\Etg.Yams.Core.Test\Etg.Yams.Core.Test.csproj", "{98B0AE89-5D42-4366-9C0E-9392737E36AC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "source", "source", "{5925E681-1BEA-456D-B9E0-CA175ABBFA9D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureBlobStorageDeploymentRepository", "src\AzureBlobStorageDeploymentRepository\AzureBlobStorageDeploymentRepository.csproj", "{DF95A9DC-F6BE-4C71-B444-4092B43EB602}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Common", "src\Common\Common.csproj", "{3E982150-5B43-44DA-8D96-66CF07A9A14C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureUtils", "src\AzureUtils\AzureUtils.csproj", "{1C890E49-5A9B-4EAB-9F69-6A6E78D82610}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureBlobStorageUpdateSession", "src\AzureBlobStorageUpdateSession\AzureBlobStorageUpdateSession.csproj", "{894B7986-5AA4-42A7-8EB0-6DFD1F604505}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureBlobStorageUpdateSessionTest", "test\AzureBlobStorageUpdateSessionTest\AzureBlobStorageUpdateSessionTest.csproj", "{9C0602C2-00DD-43F4-B274-6598AF33C00A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestUtils", "test\TestUtils\TestUtils.csproj", "{C25452E1-AFF2-4579-B6B4-F040CAD02FDA}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureBlobStorageDeploymentRepositoryTest", "test\AzureBlobStorageDeploymentRepositoryTest\AzureBlobStorageDeploymentRepositoryTest.csproj", "{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AzureUtilsTest", "test\AzureUtilsTest\AzureUtilsTest.csproj", "{2FE963BD-D826-4CC5-8A63-864CDA212233}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Core", "src\Etg.Yams.Core\Etg.Yams.Core.csproj", "{7145E485-34FA-4632-89B0-BD27C96AF69C}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stubs", "test\Stubs\Stubs.csproj", "{68CD41F8-A6C3-4D43-93CA-92E898254CBD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonitorInitProcess", "test\MonitorInitProcess\MonitorInitProcess.csproj", "{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GracefullShutdownProcess", "test\GracefullShutdownProcess\GracefullShutdownProcess.csproj", "{706E37D7-B148-4734-9695-0D1AE6D4B3D5}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HeartBeatProcess", "test\HeartBeatProcess\HeartBeatProcess.csproj", "{257044FB-F7A8-499D-8EF2-B5CAD76D617A}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "FullIpcProcess", "test\FullIpcProcess\FullIpcProcess.csproj", "{99F3A36C-7930-4670-A8B3-7137D891671D}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Powershell", "src\Etg.Yams.Powershell\Etg.Yams.Powershell.csproj", "{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Client", "src\Etg.Yams.Client\Etg.Yams.Client.csproj", "{D4624B9B-67A1-46D5-9468-58995B2720F9}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Ipc", "src\Etg.Yams.Ipc\Etg.Yams.Ipc.csproj", "{C7C03D37-F2D2-4115-8423-86C1BF1B8A18}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Host", "src\Etg.Yams.Host\Etg.Yams.Host.csproj", "{C9A993F7-E3E2-4FDC-AA1E-01348B023D16}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{E1A6854F-6C0D-4F93-9B8D-D6981727D15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E1A6854F-6C0D-4F93-9B8D-D6981727D15B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E1A6854F-6C0D-4F93-9B8D-D6981727D15B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E1A6854F-6C0D-4F93-9B8D-D6981727D15B}.Release|Any CPU.Build.0 = Release|Any CPU
{84C08621-2C78-4B19-9454-7B9019E68326}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{84C08621-2C78-4B19-9454-7B9019E68326}.Debug|Any CPU.Build.0 = Debug|Any CPU
{84C08621-2C78-4B19-9454-7B9019E68326}.Release|Any CPU.ActiveCfg = Release|Any CPU
{84C08621-2C78-4B19-9454-7B9019E68326}.Release|Any CPU.Build.0 = Release|Any CPU
{1DD27CAF-AC19-4674-A42B-F15260929BAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1DD27CAF-AC19-4674-A42B-F15260929BAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1DD27CAF-AC19-4674-A42B-F15260929BAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1DD27CAF-AC19-4674-A42B-F15260929BAF}.Release|Any CPU.Build.0 = Release|Any CPU
{80A3B3BD-8D2F-471A-A198-576772FAA048}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80A3B3BD-8D2F-471A-A198-576772FAA048}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80A3B3BD-8D2F-471A-A198-576772FAA048}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80A3B3BD-8D2F-471A-A198-576772FAA048}.Release|Any CPU.Build.0 = Release|Any CPU
{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B}.Release|Any CPU.Build.0 = Release|Any CPU
{98B0AE89-5D42-4366-9C0E-9392737E36AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{98B0AE89-5D42-4366-9C0E-9392737E36AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{98B0AE89-5D42-4366-9C0E-9392737E36AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{98B0AE89-5D42-4366-9C0E-9392737E36AC}.Release|Any CPU.Build.0 = Release|Any CPU
{DF95A9DC-F6BE-4C71-B444-4092B43EB602}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DF95A9DC-F6BE-4C71-B444-4092B43EB602}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DF95A9DC-F6BE-4C71-B444-4092B43EB602}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DF95A9DC-F6BE-4C71-B444-4092B43EB602}.Release|Any CPU.Build.0 = Release|Any CPU
{3E982150-5B43-44DA-8D96-66CF07A9A14C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E982150-5B43-44DA-8D96-66CF07A9A14C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E982150-5B43-44DA-8D96-66CF07A9A14C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E982150-5B43-44DA-8D96-66CF07A9A14C}.Release|Any CPU.Build.0 = Release|Any CPU
{1C890E49-5A9B-4EAB-9F69-6A6E78D82610}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C890E49-5A9B-4EAB-9F69-6A6E78D82610}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C890E49-5A9B-4EAB-9F69-6A6E78D82610}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C890E49-5A9B-4EAB-9F69-6A6E78D82610}.Release|Any CPU.Build.0 = Release|Any CPU
{894B7986-5AA4-42A7-8EB0-6DFD1F604505}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{894B7986-5AA4-42A7-8EB0-6DFD1F604505}.Debug|Any CPU.Build.0 = Debug|Any CPU
{894B7986-5AA4-42A7-8EB0-6DFD1F604505}.Release|Any CPU.ActiveCfg = Release|Any CPU
{894B7986-5AA4-42A7-8EB0-6DFD1F604505}.Release|Any CPU.Build.0 = Release|Any CPU
{9C0602C2-00DD-43F4-B274-6598AF33C00A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C0602C2-00DD-43F4-B274-6598AF33C00A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C0602C2-00DD-43F4-B274-6598AF33C00A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C0602C2-00DD-43F4-B274-6598AF33C00A}.Release|Any CPU.Build.0 = Release|Any CPU
{C25452E1-AFF2-4579-B6B4-F040CAD02FDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C25452E1-AFF2-4579-B6B4-F040CAD02FDA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C25452E1-AFF2-4579-B6B4-F040CAD02FDA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C25452E1-AFF2-4579-B6B4-F040CAD02FDA}.Release|Any CPU.Build.0 = Release|Any CPU
{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC}.Release|Any CPU.Build.0 = Release|Any CPU
{2FE963BD-D826-4CC5-8A63-864CDA212233}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2FE963BD-D826-4CC5-8A63-864CDA212233}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2FE963BD-D826-4CC5-8A63-864CDA212233}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2FE963BD-D826-4CC5-8A63-864CDA212233}.Release|Any CPU.Build.0 = Release|Any CPU
{7145E485-34FA-4632-89B0-BD27C96AF69C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7145E485-34FA-4632-89B0-BD27C96AF69C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7145E485-34FA-4632-89B0-BD27C96AF69C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7145E485-34FA-4632-89B0-BD27C96AF69C}.Release|Any CPU.Build.0 = Release|Any CPU
{68CD41F8-A6C3-4D43-93CA-92E898254CBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{68CD41F8-A6C3-4D43-93CA-92E898254CBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{68CD41F8-A6C3-4D43-93CA-92E898254CBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{68CD41F8-A6C3-4D43-93CA-92E898254CBD}.Release|Any CPU.Build.0 = Release|Any CPU
{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1}.Release|Any CPU.Build.0 = Release|Any CPU
{706E37D7-B148-4734-9695-0D1AE6D4B3D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{706E37D7-B148-4734-9695-0D1AE6D4B3D5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{706E37D7-B148-4734-9695-0D1AE6D4B3D5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{706E37D7-B148-4734-9695-0D1AE6D4B3D5}.Release|Any CPU.Build.0 = Release|Any CPU
{257044FB-F7A8-499D-8EF2-B5CAD76D617A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{257044FB-F7A8-499D-8EF2-B5CAD76D617A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{257044FB-F7A8-499D-8EF2-B5CAD76D617A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{257044FB-F7A8-499D-8EF2-B5CAD76D617A}.Release|Any CPU.Build.0 = Release|Any CPU
{99F3A36C-7930-4670-A8B3-7137D891671D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99F3A36C-7930-4670-A8B3-7137D891671D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99F3A36C-7930-4670-A8B3-7137D891671D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99F3A36C-7930-4670-A8B3-7137D891671D}.Release|Any CPU.Build.0 = Release|Any CPU
{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE}.Release|Any CPU.Build.0 = Release|Any CPU
{D4624B9B-67A1-46D5-9468-58995B2720F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D4624B9B-67A1-46D5-9468-58995B2720F9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D4624B9B-67A1-46D5-9468-58995B2720F9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D4624B9B-67A1-46D5-9468-58995B2720F9}.Release|Any CPU.Build.0 = Release|Any CPU
{C7C03D37-F2D2-4115-8423-86C1BF1B8A18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C7C03D37-F2D2-4115-8423-86C1BF1B8A18}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C7C03D37-F2D2-4115-8423-86C1BF1B8A18}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C7C03D37-F2D2-4115-8423-86C1BF1B8A18}.Release|Any CPU.Build.0 = Release|Any CPU
{C9A993F7-E3E2-4FDC-AA1E-01348B023D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C9A993F7-E3E2-4FDC-AA1E-01348B023D16}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C9A993F7-E3E2-4FDC-AA1E-01348B023D16}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C9A993F7-E3E2-4FDC-AA1E-01348B023D16}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{E1A6854F-6C0D-4F93-9B8D-D6981727D15B} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{84C08621-2C78-4B19-9454-7B9019E68326} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{1DD27CAF-AC19-4674-A42B-F15260929BAF} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{80A3B3BD-8D2F-471A-A198-576772FAA048} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{AEAEE225-1080-4CC9-8BA8-9F7580ED1B9B} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{98B0AE89-5D42-4366-9C0E-9392737E36AC} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{DF95A9DC-F6BE-4C71-B444-4092B43EB602} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{3E982150-5B43-44DA-8D96-66CF07A9A14C} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{1C890E49-5A9B-4EAB-9F69-6A6E78D82610} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{894B7986-5AA4-42A7-8EB0-6DFD1F604505} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{9C0602C2-00DD-43F4-B274-6598AF33C00A} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{C25452E1-AFF2-4579-B6B4-F040CAD02FDA} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{E66F281C-BD50-45B0-AAEF-FB87E4C9D0CC} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{2FE963BD-D826-4CC5-8A63-864CDA212233} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{7145E485-34FA-4632-89B0-BD27C96AF69C} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{68CD41F8-A6C3-4D43-93CA-92E898254CBD} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{BB84CC4C-EB11-4A61-8ED4-791EADAA46E1} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{706E37D7-B148-4734-9695-0D1AE6D4B3D5} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{257044FB-F7A8-499D-8EF2-B5CAD76D617A} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{99F3A36C-7930-4670-A8B3-7137D891671D} = {2A52BDC8-4B16-43FE-9E9D-A7D0A72C17C8}
{CDFBE3EE-AFD7-467F-BE9C-F9EAFC7A05CE} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{D4624B9B-67A1-46D5-9468-58995B2720F9} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{C7C03D37-F2D2-4115-8423-86C1BF1B8A18} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
{C9A993F7-E3E2-4FDC-AA1E-01348B023D16} = {5925E681-1BEA-456D-B9E0-CA175ABBFA9D}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPathV6 = packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8
SolutionGuid = {7A9645D4-78F9-451C-B788-6EC41CA3BF59}
EndGlobalSection
EndGlobal
================================================
FILE: Etg.Yams.sln.DotSettings
================================================
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
<s:String x:Key="/Default/CodeStyle/Naming/CSharpNaming/PredefinedNamingRules/=PrivateInstanceFields/@EntryIndexedValue"><Policy Inspect="True" Prefix="_" Suffix="" Style="aaBb" /></s:String></wpf:ResourceDictionary>
================================================
FILE: LICENSE
================================================
YAMS
Copyright (c) Microsoft Corporation
All rights reserved.
MIT License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
YAMS
=======
[](https://gitter.im/Microsoft/Yams?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://ci.appveyor.com/project/NehmeBilal/yams/branch/master)
**YAMS** (Yet Another Microservices Solution) is a library that can be used to deploy and host microservices on premises, in Azure, or on other cloud service platforms. It offers the following features:
* **Quick deployments** of microservices to any target environment (~1 minute deployments to Azure).
* **Sharing infrastructure** (multiple microservices can be deployed to the same on premises or cloud service).
* **Scaling microservices independently**.
* **Versioning** of microservices, quick **updates**, **reverts**, etc.
* Support for **Upgrade Domains** to minimize (and potentially eliminate) application downtime during updates, including first-class support for **Azure Upgrade Domains**.
* Microservices can be developed in **any programming language** and deployed with YAMS (as long as your service can be started with an exe).
* **Health monitoring** and **graceful shutdown** of microservices.
YAMS has first-class support for deploying applications from Azure **blob storage**, but with its pluggable storage architecture, other providers such as SQL Server or file storage can be created and plugged in as well.
To deploy an application to a YAMS cluster, simply drop the binaries of the application into YAMS deployment storage. The binaries are then picked-up by YAMS, deployed to all VMs in the cluster, and then launched.
Please read the documentation below for more information.
Documentation
=======
* [Yams Overview](Docs/Overview.md).
* [Deploy YAMS to your cloud service](Docs/Deploy_YAMS.md).
* [Deploy and host applications in YAMS](Docs/Deploy&Host_an_App_in_YAMS.md).
* [Continuous Integration with YAMS and VSTS](Docs/Continuous_Integration.md).
* [Deploy and host Orleans applications in YAMS](Docs/Deploy_Orleans_App_in_YAMS.md).
* [Yams Storage Api](Docs/YAMS_Storage.md).
* [Contributor Guide](Docs/Contributor_Guide.md).
NuGets
=======
| Module | NuGet |
| ------------- | ------------- |
| Etg.Yams | [](https://www.nuget.org/packages/Etg.Yams/) |
| Etg.Yams.Client | [](https://www.nuget.org/packages/Etg.Yams.Client/) |
| Etg.Yams.Powershell | [](https://www.nuget.org/packages/Etg.Yams.Powershell/) |
Videos
=======
* [Nehme Bilal and Reuben Bond talk about deploying Orleans with YAMS and Service Fabric](https://www.youtube.com/watch?v=w__D7gnqeZ0&feature=youtu.be).
* [Jakub Konecki talk about deploying Orleans with YAMS](https://github.com/OrleansContrib/meetups#meetup-12-deploying-orleans-with-jakub-konecki).
Contribute!
=======
We welcome contributions of all sorts including pull requests, suggestions, documentation, etc. Please feel free to open an issue to discuss any matter.
This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
License
=======
This project is licensed under the [MIT license](LICENSE).
================================================
FILE: SECURITY.md
================================================
<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->
## Security
Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/).
If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below.
## Reporting Security Issues
**Please do not report security vulnerabilities through public GitHub issues.**
Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).
If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey).
You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc).
Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
* Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
* Full paths of source file(s) related to the manifestation of the issue
* The location of the affected source code (tag/branch/commit or direct URL)
* Any special configuration required to reproduce the issue
* Step-by-step instructions to reproduce the issue
* Proof-of-concept or exploit code (if possible)
* Impact of the issue, including how an attacker might exploit the issue
This information will help us triage your report more quickly.
If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs.
## Preferred Languages
We prefer all communications to be in English.
## Policy
Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).
<!-- END MICROSOFT SECURITY.MD BLOCK -->
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.ARM.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.24720.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.Host", "Etg.Yams.Host\Etg.Yams.Host.csproj", "{F8117C86-B429-4202-88E0-6BC98209DA51}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{1326E507-4598-48F7-B614-E264AEC34FD4}"
ProjectSection(SolutionItems) = preProject
README.md = README.md
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{F8117C86-B429-4202-88E0-6BC98209DA51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F8117C86-B429-4202-88E0-6BC98209DA51}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F8117C86-B429-4202-88E0-6BC98209DA51}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F8117C86-B429-4202-88E0-6BC98209DA51}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPathV6 = packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8
EndGlobalSection
EndGlobal
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/App.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
</startup>
<appSettings>
<add key="UpdateFrequencyInSeconds" value="5" />
<add key="ApplicationRestartCount" value="2" />
<add key="LocalStoreDirectory" value=".\LocalStore" />
<add key="StorageDataConnectionString" value="DefaultEndpointsProtocol=https;AccountName=piswitchlocal;AccountKey=5PaMlu8cLyFOlA8aR+n0VF0eOWZyDuO+uDcfdDgGm/DYTPQ4ohzBuUwRSiQ1xIcP01i4flNQFKZSLcfs68vo6Q==" />
</appSettings>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-8.5.0.0" newVersion="8.5.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-10.0.0.0" newVersion="10.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Services.Client" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.OData" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Data.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-5.8.3.0" newVersion="5.8.3.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.Azure.KeyVault.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Autofac" publicKeyToken="17863af14b0044da" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.6.2.0" newVersion="4.6.2.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reactive.Core" publicKeyToken="94bc3704cddfc263" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Reactive.Linq" publicKeyToken="94bc3704cddfc263" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.0.3000.0" newVersion="3.0.3000.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/Etg.Yams.Host.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{F8117C86-B429-4202-88E0-6BC98209DA51}</ProjectGuid>
<OutputType>Exe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Etg.Yams.Host</RootNamespace>
<AssemblyName>Etg.Yams.Host</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=4.6.2.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.4.6.2\lib\net45\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="CommandLine, Version=1.9.71.2, Culture=neutral, PublicKeyToken=de6f01bd326f8c32, processorArchitecture=MSIL">
<HintPath>..\packages\CommandLineParser.1.9.71\lib\net45\CommandLine.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.dll</HintPath>
</Reference>
<Reference Include="Etg.Yams.AzureBlobStorageDeploymentRepository, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.AzureBlobStorageDeploymentRepository.dll</HintPath>
</Reference>
<Reference Include="Etg.Yams.AzureBlobStorageUpdateSession, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.AzureBlobStorageUpdateSession.dll</HintPath>
</Reference>
<Reference Include="Etg.Yams.AzureUtils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.AzureUtils.dll</HintPath>
</Reference>
<Reference Include="Etg.Yams.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.Common.dll</HintPath>
</Reference>
<Reference Include="Etg.Yams.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.5.0\lib\net451\Etg.Yams.Core.dll</HintPath>
</Reference>
<Reference Include="Microsoft.Azure.KeyVault.Core, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Azure.KeyVault.Core.2.0.4\lib\net45\Microsoft.Azure.KeyVault.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Edm, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Edm.5.8.3\lib\net40\Microsoft.Data.Edm.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.OData, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.OData.5.8.3\lib\net40\Microsoft.Data.OData.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Services.Client, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Services.Client.5.8.3\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8\Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Configuration, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.WindowsAzure.ConfigurationManager.3.2.3\lib\net40\Microsoft.WindowsAzure.Configuration.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Storage, Version=8.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\WindowsAzure.Storage.8.5.0\lib\net45\Microsoft.WindowsAzure.Storage.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.10.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Semver, Version=2.0.4.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Semver.2.0.4\lib\net452\Semver.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.ComponentModel.Composition" />
<Reference Include="System.configuration" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.IO.Compression.FileSystem" />
<Reference Include="System.Numerics" />
<Reference Include="System.Reactive.Core, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Core.3.1.1\lib\net46\System.Reactive.Core.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Interfaces, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Interfaces.3.1.1\lib\net45\System.Reactive.Interfaces.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Linq, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Linq.3.1.1\lib\net46\System.Reactive.Linq.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.PlatformServices, Version=3.0.3000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.PlatformServices.3.1.1\lib\net46\System.Reactive.PlatformServices.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Windows.Threading, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
<HintPath>..\packages\System.Reactive.Windows.Threading.3.1.1\lib\net45\System.Reactive.Windows.Threading.dll</HintPath>
</Reference>
<Reference Include="System.Runtime.Serialization" />
<Reference Include="System.Spatial, Version=5.8.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.Spatial.5.8.3\lib\net40\System.Spatial.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Windows" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Xml" />
<Reference Include="Topshelf, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b800c4cfcdeea87b, processorArchitecture=MSIL">
<HintPath>..\packages\Topshelf.4.0.3\lib\net452\Topshelf.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Unity.Abstractions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=6d32ff45e0ccc69f, processorArchitecture=MSIL">
<HintPath>..\packages\Unity.5.0.0\lib\net45\Unity.Abstractions.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Unity.Container, Version=5.0.0.0, Culture=neutral, PublicKeyToken=489b6accfaf20ef0, processorArchitecture=MSIL">
<HintPath>..\packages\Unity.5.0.0\lib\net45\Unity.Container.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="WindowsBase" />
</ItemGroup>
<ItemGroup>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
</ItemGroup>
<ItemGroup>
<None Include="App.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/Program.cs
================================================
#region
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Security.Permissions;
using System.Text;
using Microsoft.Win32;
using Topshelf;
using Topshelf.HostConfigurators;
#endregion
namespace Etg.Yams.Host
{
class Program
{
private static string _clusterId;
private static string _updateDomain;
private static string _deploymentRepositoryStorageConnectionString;
private static string _updateSessionStorageConnectionString;
private static IDictionary<string, string> _clusterProperties;
private static int? _updateFrequencyInSeconds;
private static int? _applicationRestartCount;
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
static void Main(string[] args)
{
ServicePointManager.DefaultConnectionLimit = 1000;
HostFactory.Run(x =>
{
x.AddCommandLineDefinition("clusterId", cid => _clusterId = cid);
x.AddCommandLineDefinition("updateDomain", upd => _updateDomain = upd);
x.AddCommandLineDefinition("deploymentRepositoryStorageConnectionString", drscs => _deploymentRepositoryStorageConnectionString = drscs);
x.AddCommandLineDefinition("updateSessionStorageConnectionString", upscs => _updateSessionStorageConnectionString = upscs);
x.AddCommandLineDefinition("updateFrequency", uf => _updateFrequencyInSeconds = Convert.ToInt32(uf));
x.AddCommandLineDefinition("applicationRestartCount", arc => _applicationRestartCount = Convert.ToInt32(arc));
x.AddCommandLineDefinition("clusterProperties", cp => _clusterProperties = cp.Split(new[] {','}, StringSplitOptions.RemoveEmptyEntries).Select(item => item.Split('=')).ToDictionary(s => s[0], s => s[1]));
x.ApplyCommandLine();
x.Service<IYamsService>(s =>
{
s.ConstructUsing(name =>
{
if (string.IsNullOrWhiteSpace(_updateSessionStorageConnectionString))
throw new ArgumentNullException(nameof(_updateSessionStorageConnectionString));
if (string.IsNullOrWhiteSpace(_deploymentRepositoryStorageConnectionString))
throw new ArgumentNullException(nameof(_deploymentRepositoryStorageConnectionString));
if (string.IsNullOrWhiteSpace(_clusterId))
throw new ArgumentNullException(nameof(_clusterId));
if (string.IsNullOrWhiteSpace(_updateDomain))
throw new ArgumentNullException(nameof(_updateDomain));
// mandatory configs
YamsConfigBuilder yamsConfigBuilder = new YamsConfigBuilder(
_clusterId,
_updateDomain,
Environment.MachineName,
Environment.CurrentDirectory + "\\LocalStore");
// optional configs;
if (_updateFrequencyInSeconds.HasValue)
yamsConfigBuilder.SetCheckForUpdatesPeriodInSeconds(_updateFrequencyInSeconds.Value);
if (_applicationRestartCount.HasValue)
yamsConfigBuilder.SetApplicationRestartCount(_applicationRestartCount.Value);
if (_clusterProperties!=null)
yamsConfigBuilder.AddClusterProperties(_clusterProperties);
var yamsConfig = yamsConfigBuilder.Build();
return YamsServiceFactory.Create(yamsConfig,
deploymentRepositoryStorageConnectionString: _deploymentRepositoryStorageConnectionString,
updateSessionStorageConnectionString: _updateSessionStorageConnectionString);
});
s.WhenStarted(yep => yep.Start().Wait());
s.WhenStopped(yep => yep.Stop().Wait());
});
x.RunAsLocalSystem();
x.AddCommandLineArgumentsToStartupParameters();
x.SetDescription("Yams Service Host");
x.SetDisplayName($"Yams Service [{_clusterId} - {_updateDomain}]");
x.SetServiceName("Yams");
x.EnableServiceRecovery(configurator =>
{
configurator.OnCrashOnly();
configurator.RestartService(0);
});
x.StartAutomatically();
});
}
}
public static class YamsConfigBuilderExtensions
{
public static YamsConfigBuilder AddClusterProperties(this YamsConfigBuilder yamsConfigBuilder,
IDictionary<string, string> properties)
{
foreach (var property in properties)
{
yamsConfigBuilder.AddClusterProperty(property.Key, property.Value);
}
return yamsConfigBuilder;
}
}
public static class HostConfigurationExtensions
{
private static readonly string[] TopShelfArguments =
{"install", "-instance", "-displayname", "-servicename", "-description", "--"};
public static void AddCommandLineArgumentsToStartupParameters(this HostConfigurator hostConfigurator)
{
hostConfigurator.AfterInstall(settings =>
{
using (RegistryKey system = Registry.LocalMachine.OpenSubKey("System"))
using (RegistryKey currentControlSet = system.OpenSubKey("CurrentControlSet"))
using (RegistryKey services = currentControlSet.OpenSubKey("Services"))
using (RegistryKey service = services.OpenSubKey(settings.ServiceName, true))
{
var arguments = Environment.GetCommandLineArgs();
var imagePath = service.GetValue("ImagePath");
var newImagePath = arguments
.Skip(1)
.Where(a => !IsTopShelfArgument(a))
.Aggregate(imagePath, (o1, o2) => $"{o1} {o2}");
service.SetValue("ImagePath", newImagePath, RegistryValueKind.String);
}
});
}
private static bool IsTopShelfArgument(string argument)
{
return TopShelfArguments.Any(w => argument.StartsWith(w, StringComparison.InvariantCultureIgnoreCase));
}
}
}
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Etg.Yams.Host")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Etg.Yams.Host")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("f8117c86-b429-4202-88e0-6bc98209da51")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
================================================
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/packages.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Autofac" version="4.6.2" targetFramework="net461" />
<package id="CommandLineParser" version="1.9.71" targetFramework="net461" />
<package id="EnterpriseLibrary.TransientFaultHandling" version="6.0.1304.0" targetFramework="net461" />
<package id="Etg.Yams" version="1.5.0" targetFramework="net461" />
<package id="Microsoft.Azure.KeyVault.Core" version="2.0.4" targetFramework="net461" />
<package id="Microsoft.Data.Edm" version="5.8.3" targetFramework="net461" />
<package id="Microsoft.Data.OData" version="5.8.3" targetFramework="net461" />
<package id="Microsoft.Data.Services.Client" version="5.8.3" targetFramework="net461" />
<package id="Microsoft.WindowsAzure.ConfigurationManager" version="3.2.3" targetFramework="net461" />
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="net461" />
<package id="Rx-Core" version="2.2.5" targetFramework="net451" />
<package id="Rx-Interfaces" version="2.2.5" targetFramework="net451" />
<package id="Rx-Linq" version="2.2.5" targetFramework="net451" />
<package id="Rx-Main" version="2.2.5" targetFramework="net451" />
<package id="Rx-PlatformServices" version="2.2.5" targetFramework="net451" />
<package id="Semver" version="2.0.4" targetFramework="net461" />
<package id="System.Reactive" version="3.1.1" targetFramework="net461" />
<package id="System.Reactive.Core" version="3.1.1" targetFramework="net461" />
<package id="System.Reactive.Interfaces" version="3.1.1" targetFramework="net461" />
<package id="System.Reactive.Linq" version="3.1.1" targetFramework="net461" />
<package id="System.Reactive.PlatformServices" version="3.1.1" targetFramework="net461" />
<package id="System.Reactive.Windows.Threading" version="3.1.1" targetFramework="net461" />
<package id="System.Runtime" version="4.3.0" targetFramework="net461" />
<package id="System.Spatial" version="5.8.3" targetFramework="net461" />
<package id="Topshelf" version="4.0.3" targetFramework="net461" />
<package id="Unity" version="5.0.0" targetFramework="net461" />
<package id="WindowsAzure.Storage" version="8.5.0" targetFramework="net461" />
</packages>
================================================
FILE: Samples/Etg.Yams.ARM/README.md
================================================
# Yams Console/Windows Service Host #
The idea with this sample project is to be used as a Yams cluster note on a regular Virtual Machine.
## How to run? ##
In order to run it as a console app, call the following command line:
```
Etg.Yams.Host.exe -deploymentId:MyDeploymentId -updateDomain:MyUpdateDomain -storageAccount:__MYSTORAGEACC__ -storageKey:__MYSTORAGEKEY__ -updateFrequency:5 -applicationRestartCount:2
```
If you want to install it as a Windows Service add the `-install` parameter to the command-line.
Replace the parameters as follow:
- deploymentId: The Yams Cluster Deployment Id
- updateDomain: The update domain
- storageAccount: Azure Storage account name
- storageKey: Azure Storage account key
- updateFrequency: regular Yams update frequency (in second)
- applicationRestartCount: regular Yams parameter
Those parameters can be set on the project property for debug purposes.
## What is next? ##
1. Create a Chocolatey package and publish it to chocolatey.org
2. Create an Azure Resource Manager (ARM) Template
3. Put a on-click-deply link on Yams repo so people will be able to deploy a Yams cluster by just click on this link and fill the wizard parameters.
More news soon!
[]s
================================================
FILE: Samples/Etg.Yams.Cloud/Backend/Backend.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Backend</RootNamespace>
<AssemblyName>Backend</AssemblyName>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<RoleType>Worker</RoleType>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<ItemGroup>
<Reference Include="Microsoft.Azure.KeyVault.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Edm, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Edm.5.6.4\lib\net40\Microsoft.Data.Edm.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.OData, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.OData.5.6.4\lib\net40\Microsoft.Data.OData.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Services.Client, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Services.Client.5.6.4\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Storage, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\WindowsAzure.Storage.7.0.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Spatial, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.Spatial.5.6.4\lib\net40\System.Spatial.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="WorkerRole.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Etg.Yams.WorkerRole\Etg.Yams.WorkerRole.csproj">
<Project>{b38d7d2a-bdc1-49fe-b0dd-d799e3e746ad}</Project>
<Name>Etg.Yams.WorkerRole</Name>
</ProjectReference>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<PropertyGroup>
<!-- Setting AutoUnifyAssemblyReferences to false will allow the ResolveAssemblyReferences task to
create warnings when detecting version missmatches among references.
-->
<AutoUnifyAssemblyReferences>false</AutoUnifyAssemblyReferences>
</PropertyGroup>
</Project>
================================================
FILE: Samples/Etg.Yams.Cloud/Backend/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Backend")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Backend")]
[assembly: AssemblyCopyright("Copyright © 2016")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("d6eb9dd4-4dc6-4cf1-888b-4a4a548e3fd1")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
================================================
FILE: Samples/Etg.Yams.Cloud/Backend/WorkerRole.cs
================================================
using Etg.Yams.WorkerRole;
namespace Backend
{
public class WorkerRole : YamsWorkerRole
{
protected override bool IsSingleClusterDeployment
{
get { return false; }
}
}
}
================================================
FILE: Samples/Etg.Yams.Cloud/Backend/app.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.diagnostics>
<trace>
<listeners>
<add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics">
<filter type="" />
</add>
</listeners>
</trace>
</system.diagnostics>
<runtime>
<gcServer enabled="true"></gcServer>
<gcConcurrent enabled="false"></gcConcurrent>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="MonAgentListener" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.Storage" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-7.0.0.0" newVersion="7.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.1" /></startup></configuration>
================================================
FILE: Samples/Etg.Yams.Cloud/Backend/packages.config
================================================
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="Microsoft.Azure.KeyVault.Core" version="1.0.0" targetFramework="net451" />
<package id="Microsoft.Data.Edm" version="5.6.4" targetFramework="net451" />
<package id="Microsoft.Data.OData" version="5.6.4" targetFramework="net451" />
<package id="Microsoft.Data.Services.Client" version="5.6.4" targetFramework="net451" />
<package id="Newtonsoft.Json" version="6.0.8" targetFramework="net451" />
<package id="System.Spatial" version="5.6.4" targetFramework="net451" />
<package id="WindowsAzure.Storage" version="7.0.0" targetFramework="net451" />
</packages>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/GCSettingsManagement.ps1
================================================
<#
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the Microsoft Public License.
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************
#>
Param
(
$serverGC = $True,
$backgroundGC = $True
)
[string]$configFilePath = "$(${env:RoleRoot})\base\x64\WaWorkerHost.exe.config"
function Create-ConfigFileIfNotExists
{
# Only create the Xml document if it does not already exist
if(-not (Test-Path -Path $configFilePath -PathType Leaf))
{
[System.Xml.XmlDocument]$document = New-Object System.Xml.XmlDocument
# config file doesn't exist create a now one
[System.Xml.XmlDeclaration]$prolog = $document.CreateXmlDeclaration("1.0", "utf-8", $null)
[System.Xml.XmlNode]$child = $document.AppendChild($prolog)
[System.Xml.XmlElement]$configurationElement = Append-ElementIfNotExists $document $document.DocumentElement "configuration"
# Save a copy of the document
$document.Save($configFilePath)
}
}
function Load-ConfigFile
{
[System.Xml.XmlDocument]$document = New-Object System.Xml.XmlDocument
#Check if the document already exists and load it if it does not
if(Test-Path -Path $configFilePath -PathType Leaf)
{
$document.Load($configFilePath)
}
return $document
}
function Append-ElementIfNotExists
{
param
(
[System.Xml.XmlDocument]$document,
[System.Xml.XmlElement]$parent,
[string]$elementName
)
[System.Xml.XmlElement]$element = $null
[System.Xml.XmlNode]$parentNode = $parent
if($document -ne $null)
{
if($parentNode -eq $null)
{
$parentNode = $document
}
$element = $parentNode.SelectSingleNode("./$($elementName)")
if($element -eq $null)
{
$element = $document.CreateElement($elementName)
[System.Xml.XmlElement]$child = $parentNode.AppendChild($element)
}
}
return $element
}
function Create-ElementStructureIfNotExists
{
param
(
[System.Xml.XmlDocument]$document
)
[bool]$isSuccess = $false
if($document -ne $null)
{
[System.Xml.XmlElement]$configurationElement = Append-ElementIfNotExists $document $null "configuration"
if($configurationElement -ne $null)
{
[System.Xml.XmlElement]$element = Append-ElementIfNotExists $document $configurationElement "runtime"
$isSuccess = $element -ne $null
}
}
return $isSuccess
}
# Create the document if required
Create-ConfigFileIfNotExists
# Load the configuration file into the XML document
[System.Xml.XmlDocument]$configurationDocument = Load-ConfigFile
if($configurationDocument -ne $null)
{
if(Create-ElementStructureIfNotExists $configurationDocument)
{
# All of the entries are on the runtime element
[System.Xml.XmlElement]$runtimeElement = $configurationDocument.DocumentElement.SelectSingleNode('./runtime')
if($runtimeElement -ne $null)
{
# Set the Server GC to enabled if requested
[System.Xml.XmlElement]$serverGCElement = Append-ElementIfNotExists $configurationDocument $runtimeElement "gcServer"
$serverGCElement.SetAttribute("enabled", $serverGC.ToString([System.Globalization.CultureInfo]::InvariantCulture).ToLower())
# Set the concurrent GC to enabled if requested
[System.Xml.XmlElement]$concurrentGCElement = Append-ElementIfNotExists $configurationDocument $runtimeElement "gcConcurrent"
$concurrentGCElement.SetAttribute("enabled", $backgroundGC.ToString([System.Globalization.CultureInfo]::InvariantCulture).ToLower())
}
}
# Save the document
$configurationDocument.Save($configFilePath)
}
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/ServerGC.cmd
================================================
REM Check if the script is running in the Azure Emulator, and if so, do not run
REM IF "%IsEmulated%"=="true" goto :EOF
If "%UseServerGC%"=="False" GOTO :ValidateBackground
If "%UseServerGC%"=="0" GOTO :ValidateBackground
SET UseServerGC="True"
:ValidateBackground
If "%UseBackgroundGC%"=="False" GOTO :CommandExecution
If "%UseBackgroundGC%"=="0" GOTO :CommandExecution
SET UseBackgroundGC="True"
:CommandExecution
PowerShell.exe -executionpolicy unrestricted -command ".\GCSettingsManagement.ps1" -serverGC %UseServerGC% -backgroundGC %UseBackgroundGC%
Exit /b
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/diagnostics.wadcfgx
================================================
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error"/>
<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Information" />
<Directories scheduledTransferPeriod="PT1M">
<IISLogs containerName ="wad-iis-logfiles" />
<FailedRequestLogs containerName ="wad-failedrequestlogs" />
</Directories>
<WindowsEventLog scheduledTransferPeriod="PT1M" >
<DataSource name="Application!*[System[(Level=1 or Level=2 or Level=3)]]" />
<DataSource name="Windows Azure!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]" />
</WindowsEventLog>
<CrashDumps containerName="wad-crashdumps" dumpType="Mini">
<CrashDumpConfiguration processName="WaIISHost.exe"/>
<CrashDumpConfiguration processName="WaWorkerHost.exe"/>
<CrashDumpConfiguration processName="w3wp.exe"/>
</CrashDumps>
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<StorageAccount></StorageAccount>
</PublicConfig>
<PrivateConfig>
<StorageAccount name="" key="" endpoint="" />
</PrivateConfig>
<IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/Etg.Yams.Cloud.MultipleClusters.ccproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>2.9</ProductVersion>
<ProjectGuid>f9c2b6e8-6d14-4201-956a-a2e93073cbbc</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Etg.Yams.Cloud</RootNamespace>
<AssemblyName>Etg.Yams.Cloud</AssemblyName>
<StartDevelopmentStorage>True</StartDevelopmentStorage>
<Name>Etg.Yams.Cloud.MultipleClusters</Name>
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
<UseWebProjectPorts>True</UseWebProjectPorts>
<PackageEnableRemoteDebugger>True</PackageEnableRemoteDebugger>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<!-- Items for the project -->
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Cloud.cscfg" />
</ItemGroup>
<ItemGroup>
<Folder Include="BackendContent\" />
<Folder Include="FrontendContent\" />
<Folder Include="Profiles" />
</ItemGroup>
<ItemGroup>
<DiagnosticsConfiguration Include="BackendContent\diagnostics.wadcfgx" />
<DiagnosticsConfiguration Include="FrontendContent\diagnostics.wadcfgx" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Backend\Backend.csproj">
<Name>Backend</Name>
<Project>{d6eb9dd4-4dc6-4cf1-888b-4a4a548e3fd1}</Project>
<Private>True</Private>
<RoleType>Worker</RoleType>
<RoleName>Backend</RoleName>
<UpdateDiagnosticsConnectionStringOnPublish>True</UpdateDiagnosticsConnectionStringOnPublish>
</ProjectReference>
<ProjectReference Include="..\Frontend\Frontend.csproj">
<Name>Frontend</Name>
<Project>{c80821c2-215c-429e-a6a3-bfb132b5c1f4}</Project>
<Private>True</Private>
<RoleType>Worker</RoleType>
<RoleName>Frontend</RoleName>
<UpdateDiagnosticsConnectionStringOnPublish>True</UpdateDiagnosticsConnectionStringOnPublish>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="BackendContent\GCSettingsManagement.ps1">
<SubType>Content</SubType>
</Content>
<Content Include="BackendContent\ServerGC.cmd">
<SubType>Content</SubType>
</Content>
</ItemGroup>
<!-- Import the target files for this project template -->
<PropertyGroup>
<VisualStudioVersion Condition=" '$(VisualStudioVersion)' == '' ">10.0</VisualStudioVersion>
<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.9\</CloudExtensionsDir>
</PropertyGroup>
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
</Project>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/FrontendContent/diagnostics.wadcfgx
================================================
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error"/>
<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Information" />
<Directories scheduledTransferPeriod="PT1M">
<IISLogs containerName ="wad-iis-logfiles" />
<FailedRequestLogs containerName ="wad-failedrequestlogs" />
</Directories>
<WindowsEventLog scheduledTransferPeriod="PT1M" >
<DataSource name="Application!*[System[(Level=1 or Level=2 or Level=3)]]" />
<DataSource name="Windows Azure!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]" />
</WindowsEventLog>
<CrashDumps containerName="wad-crashdumps" dumpType="Mini">
<CrashDumpConfiguration processName="WaIISHost.exe"/>
<CrashDumpConfiguration processName="WaWorkerHost.exe"/>
<CrashDumpConfiguration processName="w3wp.exe"/>
</CrashDumps>
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<StorageAccount></StorageAccount>
</PublicConfig>
<PrivateConfig>
<StorageAccount name="" key="" endpoint="" />
</PrivateConfig>
<IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceConfiguration.Cloud.cscfg
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="Frontend">
<Instances count="3" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_THE_BLOB_STORAGE" />
<Setting name="UpdateFrequencyInSeconds" value="10" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_LOGS"/>
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
<Role name="Backend">
<Instances count="3" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_THE_BLOB_STORAGE" />
<Setting name="UpdateFrequencyInSeconds" value="10" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_LOGS"/>
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceConfiguration.Local.cscfg
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="Frontend">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="UpdateFrequencyInSeconds" value="5" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true"/>
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
<Role name="Backend">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="UpdateFrequencyInSeconds" value="5" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true"/>
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceDefinition.csdef
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6" upgradeDomainCount="5">
<WorkerRole name="Frontend" vmsize="ExtraLarge">
<Runtime executionContext="elevated" />
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" />
<Setting name="UpdateFrequencyInSeconds" />
<Setting name="ApplicationRestartCount" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"/>
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="MY_CERTIFICATE" />
<InputEndpoint name="HttpIn" protocol="http" port="80" />
</Endpoints>
<LocalResources>
<LocalStorage name="LocalStoreDirectory" cleanOnRoleRecycle="false" />
</LocalResources>
<Certificates>
<Certificate name="MY_CERTIFICATE" storeLocation="LocalMachine" storeName="MY_STORE_NAME" />
</Certificates>
</WorkerRole>
<WorkerRole name="Backend" vmsize="ExtraLarge">
<Runtime executionContext="elevated" />
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" />
<Setting name="UpdateFrequencyInSeconds" />
<Setting name="ApplicationRestartCount" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"/>
</ConfigurationSettings>
<Endpoints>
<InternalEndpoint name="TcpEndpoints" protocol="tcp">
<FixedPortRange min="81" max="400" />
</InternalEndpoint>
</Endpoints>
<LocalResources>
<LocalStorage name="LocalStoreDirectory" cleanOnRoleRecycle="false" />
</LocalResources>
<Certificates>
<Certificate name="MY_CERTIFICATE" storeLocation="LocalMachine" storeName="MY_STORE_NAME" />
</Certificates>
<Startup>
<Task commandLine="ServerGC.cmd" executionContext="elevated" taskType="simple">
<Environment>
<Variable name="UseServerGC" value="True" />
<Variable name="UseBackgroundGC" value="True" />
</Environment>
</Task>
</Startup>
</WorkerRole>
</ServiceDefinition>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.WorkerRole", "Etg.Yams.WorkerRole\Etg.Yams.WorkerRole.csproj", "{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Frontend", "Frontend\Frontend.csproj", "{C80821C2-215C-429E-A6A3-BFB132B5C1F4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Backend", "Backend\Backend.csproj", "{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}"
EndProject
Project("{CC5FD16D-436D-48AD-A40C-5A424C6E3E79}") = "Etg.Yams.Cloud.MultipleClusters", "Etg.Yams.Cloud.MultipleClusters\Etg.Yams.Cloud.MultipleClusters.ccproj", "{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Release|Any CPU.Build.0 = Release|Any CPU
{C80821C2-215C-429E-A6A3-BFB132B5C1F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C80821C2-215C-429E-A6A3-BFB132B5C1F4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C80821C2-215C-429E-A6A3-BFB132B5C1F4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C80821C2-215C-429E-A6A3-BFB132B5C1F4}.Release|Any CPU.Build.0 = Release|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Release|Any CPU.Build.0 = Release|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPathV6 = packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8
EndGlobalSection
EndGlobal
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/Etg.Yams.Cloud.SingleCluster.ccproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>2.9</ProductVersion>
<ProjectGuid>f9c2b6e8-6d14-4201-956a-a2e93073cbbc</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Etg.Yams.Cloud</RootNamespace>
<AssemblyName>Etg.Yams.Cloud</AssemblyName>
<StartDevelopmentStorage>True</StartDevelopmentStorage>
<Name>Etg.Yams.Cloud.SingleCluster</Name>
<SccProjectName>SAK</SccProjectName>
<SccProvider>SAK</SccProvider>
<SccAuxPath>SAK</SccAuxPath>
<SccLocalPath>SAK</SccLocalPath>
<UseWebProjectPorts>True</UseWebProjectPorts>
<PackageEnableRemoteDebugger>True</PackageEnableRemoteDebugger>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<!-- Items for the project -->
<ItemGroup>
<ServiceDefinition Include="ServiceDefinition.csdef" />
<ServiceConfiguration Include="ServiceConfiguration.Local.cscfg" />
<ServiceConfiguration Include="ServiceConfiguration.Cloud.cscfg" />
</ItemGroup>
<ItemGroup>
<Folder Include="Profiles" />
<Folder Include="SingleClusterRoleContent\" />
</ItemGroup>
<ItemGroup>
<DiagnosticsConfiguration Include="SingleClusterRoleContent\diagnostics.wadcfgx" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\SingleClusterRole\SingleClusterRole.csproj">
<Name>SingleClusterRole</Name>
<Project>{d6eb9dd4-4dc6-4cf1-888b-4a4a548e3fd1}</Project>
<Private>True</Private>
<RoleType>Worker</RoleType>
<RoleName>SingleClusterRole</RoleName>
<UpdateDiagnosticsConnectionStringOnPublish>True</UpdateDiagnosticsConnectionStringOnPublish>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<Content Include="SingleClusterRoleContent\GCSettingsManagement.ps1">
<SubType>Content</SubType>
</Content>
<Content Include="SingleClusterRoleContent\ServerGC.cmd">
<SubType>Content</SubType>
</Content>
</ItemGroup>
<!-- Import the target files for this project template -->
<PropertyGroup>
<VisualStudioVersion Condition=" '$(VisualStudioVersion)' == '' ">10.0</VisualStudioVersion>
<CloudExtensionsDir Condition=" '$(CloudExtensionsDir)' == '' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Windows Azure Tools\2.9\</CloudExtensionsDir>
</PropertyGroup>
<Import Project="$(CloudExtensionsDir)Microsoft.WindowsAzure.targets" />
</Project>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceConfiguration.Cloud.cscfg
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="SingleClusterRole">
<Instances count="3" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_THE_BLOB_STORAGE" />
<Setting name="UpdateFrequencyInSeconds" value="10" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="MY_DATA_CONNECTION_STRING_FOR_LOGS" />
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceConfiguration.Local.cscfg
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceConfiguration serviceName="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="4" osVersion="*" schemaVersion="2015-04.2.6">
<Role name="SingleClusterRole">
<Instances count="1" />
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" value="UseDevelopmentStorage=true" />
<Setting name="UpdateFrequencyInSeconds" value="5" />
<Setting name="ApplicationRestartCount" value="3" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountUsername" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountEncryptedPassword" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteAccess.AccountExpiration" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.RemoteForwarder.Enabled" value="" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString" value="UseDevelopmentStorage=true" />
</ConfigurationSettings>
<Certificates>
<!--Replace thumbprints with your own-->
<Certificate name="MY_CERTIFICATE" thumbprintAlgorithm="sha1" thumbprint="MY_THUMBPRINT" />
<Certificate name="Microsoft.WindowsAzure.Plugins.RemoteAccess.PasswordEncryption" thumbprint="MY_THUMBPRINT" thumbprintAlgorithm="sha1" />
</Certificates>
</Role>
</ServiceConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceDefinition.csdef
================================================
<?xml version="1.0" encoding="utf-8"?>
<ServiceDefinition name="Etg.Yams.Cloud" xmlns="http://schemas.microsoft.com/ServiceHosting/2008/10/ServiceDefinition" schemaVersion="2015-04.2.6" upgradeDomainCount="5">
<WorkerRole name="SingleClusterRole" vmsize="ExtraLarge">
<Runtime executionContext="elevated" />
<Imports>
<Import moduleName="RemoteAccess" />
<Import moduleName="RemoteForwarder" />
</Imports>
<ConfigurationSettings>
<Setting name="StorageDataConnectionString" />
<Setting name="UpdateFrequencyInSeconds" />
<Setting name="ApplicationRestartCount" />
<Setting name="Microsoft.WindowsAzure.Plugins.Diagnostics.ConnectionString"/>
</ConfigurationSettings>
<Endpoints>
<InputEndpoint name="HttpsIn" protocol="https" port="443" certificate="MY_CERTIFICATE" />
<InputEndpoint name="HttpIn" protocol="http" port="80" />
<InternalEndpoint name="TcpEndpoints" protocol="tcp">
<FixedPortRange min="81" max="400" />
</InternalEndpoint>
</Endpoints>
<LocalResources>
<LocalStorage name="LocalStoreDirectory" cleanOnRoleRecycle="false" />
</LocalResources>
<Certificates>
<Certificate name="MY_CERTIFICATE" storeLocation="LocalMachine" storeName="MY_STORE_NAME" />
</Certificates>
<Startup>
<Task commandLine="ServerGC.cmd" executionContext="elevated" taskType="simple">
<Environment>
<Variable name="UseServerGC" value="True" />
<Variable name="UseBackgroundGC" value="True" />
</Environment>
</Task>
</Startup>
</WorkerRole>
</ServiceDefinition>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/GCSettingsManagement.ps1
================================================
<#
//*********************************************************
//
// Copyright (c) Microsoft. All rights reserved.
// This code is licensed under the Microsoft Public License.
// THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
// IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
// PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
//
//*********************************************************
#>
Param
(
$serverGC = $True,
$backgroundGC = $True
)
[string]$configFilePath = "$(${env:RoleRoot})\base\x64\WaWorkerHost.exe.config"
function Create-ConfigFileIfNotExists
{
# Only create the Xml document if it does not already exist
if(-not (Test-Path -Path $configFilePath -PathType Leaf))
{
[System.Xml.XmlDocument]$document = New-Object System.Xml.XmlDocument
# config file doesn't exist create a now one
[System.Xml.XmlDeclaration]$prolog = $document.CreateXmlDeclaration("1.0", "utf-8", $null)
[System.Xml.XmlNode]$child = $document.AppendChild($prolog)
[System.Xml.XmlElement]$configurationElement = Append-ElementIfNotExists $document $document.DocumentElement "configuration"
# Save a copy of the document
$document.Save($configFilePath)
}
}
function Load-ConfigFile
{
[System.Xml.XmlDocument]$document = New-Object System.Xml.XmlDocument
#Check if the document already exists and load it if it does not
if(Test-Path -Path $configFilePath -PathType Leaf)
{
$document.Load($configFilePath)
}
return $document
}
function Append-ElementIfNotExists
{
param
(
[System.Xml.XmlDocument]$document,
[System.Xml.XmlElement]$parent,
[string]$elementName
)
[System.Xml.XmlElement]$element = $null
[System.Xml.XmlNode]$parentNode = $parent
if($document -ne $null)
{
if($parentNode -eq $null)
{
$parentNode = $document
}
$element = $parentNode.SelectSingleNode("./$($elementName)")
if($element -eq $null)
{
$element = $document.CreateElement($elementName)
[System.Xml.XmlElement]$child = $parentNode.AppendChild($element)
}
}
return $element
}
function Create-ElementStructureIfNotExists
{
param
(
[System.Xml.XmlDocument]$document
)
[bool]$isSuccess = $false
if($document -ne $null)
{
[System.Xml.XmlElement]$configurationElement = Append-ElementIfNotExists $document $null "configuration"
if($configurationElement -ne $null)
{
[System.Xml.XmlElement]$element = Append-ElementIfNotExists $document $configurationElement "runtime"
$isSuccess = $element -ne $null
}
}
return $isSuccess
}
# Create the document if required
Create-ConfigFileIfNotExists
# Load the configuration file into the XML document
[System.Xml.XmlDocument]$configurationDocument = Load-ConfigFile
if($configurationDocument -ne $null)
{
if(Create-ElementStructureIfNotExists $configurationDocument)
{
# All of the entries are on the runtime element
[System.Xml.XmlElement]$runtimeElement = $configurationDocument.DocumentElement.SelectSingleNode('./runtime')
if($runtimeElement -ne $null)
{
# Set the Server GC to enabled if requested
[System.Xml.XmlElement]$serverGCElement = Append-ElementIfNotExists $configurationDocument $runtimeElement "gcServer"
$serverGCElement.SetAttribute("enabled", $serverGC.ToString([System.Globalization.CultureInfo]::InvariantCulture).ToLower())
# Set the concurrent GC to enabled if requested
[System.Xml.XmlElement]$concurrentGCElement = Append-ElementIfNotExists $configurationDocument $runtimeElement "gcConcurrent"
$concurrentGCElement.SetAttribute("enabled", $backgroundGC.ToString([System.Globalization.CultureInfo]::InvariantCulture).ToLower())
}
}
# Save the document
$configurationDocument.Save($configFilePath)
}
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/ServerGC.cmd
================================================
REM Check if the script is running in the Azure Emulator, and if so, do not run
REM IF "%IsEmulated%"=="true" goto :EOF
If "%UseServerGC%"=="False" GOTO :ValidateBackground
If "%UseServerGC%"=="0" GOTO :ValidateBackground
SET UseServerGC="True"
:ValidateBackground
If "%UseBackgroundGC%"=="False" GOTO :CommandExecution
If "%UseBackgroundGC%"=="0" GOTO :CommandExecution
SET UseBackgroundGC="True"
:CommandExecution
PowerShell.exe -executionpolicy unrestricted -command ".\GCSettingsManagement.ps1" -serverGC %UseServerGC% -backgroundGC %UseBackgroundGC%
Exit /b
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/diagnostics.wadcfgx
================================================
<?xml version="1.0" encoding="utf-8"?>
<DiagnosticsConfiguration xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
<PublicConfig>
<WadCfg>
<DiagnosticMonitorConfiguration overallQuotaInMB="4096">
<DiagnosticInfrastructureLogs scheduledTransferLogLevelFilter="Error"/>
<Logs scheduledTransferPeriod="PT1M" scheduledTransferLogLevelFilter="Information" />
<Directories scheduledTransferPeriod="PT1M">
<IISLogs containerName ="wad-iis-logfiles" />
<FailedRequestLogs containerName ="wad-failedrequestlogs" />
</Directories>
<WindowsEventLog scheduledTransferPeriod="PT1M" >
<DataSource name="Application!*[System[(Level=1 or Level=2 or Level=3)]]" />
<DataSource name="Windows Azure!*[System[(Level=1 or Level=2 or Level=3 or Level=4)]]" />
</WindowsEventLog>
<CrashDumps containerName="wad-crashdumps" dumpType="Mini">
<CrashDumpConfiguration processName="WaIISHost.exe"/>
<CrashDumpConfiguration processName="WaWorkerHost.exe"/>
<CrashDumpConfiguration processName="w3wp.exe"/>
</CrashDumps>
<PerformanceCounters scheduledTransferPeriod="PT1M">
<PerformanceCounterConfiguration counterSpecifier="\Memory\Available MBytes" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\ISAPI Extension Requests/sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Web Service(_Total)\Bytes Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Requests/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET Applications(__Total__)\Errors Total/Sec" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Queued" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\ASP.NET\Requests Rejected" sampleRate="PT3M" />
<PerformanceCounterConfiguration counterSpecifier="\Processor(_Total)\% Processor Time" sampleRate="PT3M" />
</PerformanceCounters>
</DiagnosticMonitorConfiguration>
</WadCfg>
<StorageAccount></StorageAccount>
</PublicConfig>
<PrivateConfig>
<StorageAccount name="" key="" endpoint="" />
</PrivateConfig>
<IsEnabled>true</IsEnabled>
</DiagnosticsConfiguration>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster.sln
================================================
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25123.0
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Etg.Yams.WorkerRole", "Etg.Yams.WorkerRole\Etg.Yams.WorkerRole.csproj", "{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}"
EndProject
Project("{CC5FD16D-436D-48AD-A40C-5A424C6E3E79}") = "Etg.Yams.Cloud.SingleCluster", "Etg.Yams.Cloud.SingleCluster\Etg.Yams.Cloud.SingleCluster.ccproj", "{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SingleClusterRole", "SingleClusterRole\SingleClusterRole.csproj", "{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}.Release|Any CPU.Build.0 = Release|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F9C2B6E8-6D14-4201-956A-A2E93073CBBC}.Release|Any CPU.Build.0 = Release|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6EB9DD4-4DC6-4CF1-888B-4A4A548E3FD1}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
EnterpriseLibraryConfigurationToolBinariesPathV6 = packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8
EndGlobalSection
EndGlobal
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Etg.Yams.WorkerRole.csproj
================================================
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="12.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{B38D7D2A-BDC1-49FE-B0DD-D799E3E746AD}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>Etg.Yams.WorkerRole</RootNamespace>
<AssemblyName>Etg.Yams.WorkerRole</AssemblyName>
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<SccProjectName>SAK</SccProjectName>
<SccLocalPath>SAK</SccLocalPath>
<SccAuxPath>SAK</SccAuxPath>
<SccProvider>SAK</SccProvider>
<RoleType>Worker</RoleType>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Label="SlowCheetah">
<SlowCheetahToolsPath>$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\..\packages\SlowCheetah.2.5.14\tools\))</SlowCheetahToolsPath>
<SlowCheetah_EnableImportFromNuGet Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='' ">true</SlowCheetah_EnableImportFromNuGet>
<SlowCheetah_NuGetImportPath Condition=" '$(SlowCheetah_NuGetImportPath)'=='' ">$([System.IO.Path]::GetFullPath( $(MSBuildProjectDirectory)\Properties\SlowCheetah\SlowCheetah.Transforms.targets ))</SlowCheetah_NuGetImportPath>
<SlowCheetahTargets Condition=" '$(SlowCheetah_EnableImportFromNuGet)'=='true' and Exists('$(SlowCheetah_NuGetImportPath)') ">$(SlowCheetah_NuGetImportPath)</SlowCheetahTargets>
</PropertyGroup>
<ItemGroup>
<Reference Include="Autofac, Version=3.5.0.0, Culture=neutral, PublicKeyToken=17863af14b0044da, processorArchitecture=MSIL">
<HintPath>..\packages\Autofac.3.5.2\lib\net40\Autofac.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams.AzureBlobStorageDeploymentRepository, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.AzureBlobStorageDeploymentRepository.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams.AzureBlobStorageUpdateSession, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.AzureBlobStorageUpdateSession.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams.AzureUtils, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.AzureUtils.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams.Common, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.Common.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Etg.Yams.Core, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL">
<HintPath>..\packages\Etg.Yams.1.0.14\lib\net451\Etg.Yams.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Azure.KeyVault.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Azure.KeyVault.Core.1.0.0\lib\net40\Microsoft.Azure.KeyVault.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Edm, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Edm.5.6.4\lib\net40\Microsoft.Data.Edm.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.OData, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.OData.5.6.4\lib\net40\Microsoft.Data.OData.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Data.Services.Client, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Microsoft.Data.Services.Client.5.6.4\lib\net40\Microsoft.Data.Services.Client.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling, Version=6.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\EnterpriseLibrary.TransientFaultHandling.6.0.1304.0\lib\portable-net45+win+wp8\Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<Private>True</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.ServiceRuntime, Version=2.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
<Private>False</Private>
</Reference>
<Reference Include="Microsoft.WindowsAzure.Storage, Version=7.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\WindowsAzure.Storage.7.0.0\lib\net40\Microsoft.WindowsAzure.Storage.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
<HintPath>..\packages\Newtonsoft.Json.6.0.8\lib\net45\Newtonsoft.Json.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Net.Http" />
<Reference Include="System.Net.Http.Formatting, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Client.5.2.3\lib\net45\System.Net.Http.Formatting.dll</HintPath>
</Reference>
<Reference Include="System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Rx-Core.2.2.5\lib\net45\System.Reactive.Core.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.Interfaces, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Rx-Interfaces.2.2.5\lib\net45\System.Reactive.Interfaces.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.Linq, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Rx-Linq.2.2.5\lib\net45\System.Reactive.Linq.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Reactive.PlatformServices, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\Rx-PlatformServices.2.2.5\lib\net45\System.Reactive.PlatformServices.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Spatial, Version=5.6.4.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<HintPath>..\packages\System.Spatial.5.6.4\lib\net40\System.Spatial.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="System.Web.Cors, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.Cors.5.2.3\lib\net45\System.Web.Cors.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.WebApi.Core.5.2.3\lib\net45\System.Web.Http.dll</HintPath>
</Reference>
<Reference Include="System.Web.Http.Owin">
<HintPath>..\packages\Microsoft.AspNet.WebApi.Owin.5.2.3\lib\net45\System.Web.Http.Owin.dll</HintPath>
</Reference>
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="Microsoft.CSharp" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils\AzureUtils.cs" />
<Compile Include="Utils\DeploymentIdUtils.cs" />
<Compile Include="WorkerRoleConfig.cs" />
<Compile Include="WorkerRole.cs" />
</ItemGroup>
<ItemGroup>
<None Include="app.config">
<SubType>Designer</SubType>
</None>
<None Include="packages.config">
<SubType>Designer</SubType>
</None>
<None Include="Properties\SlowCheetah\SlowCheetah.Transforms.targets" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="AfterCompile" Condition="Exists('app.$(Configuration).config')">
<!--Generate transformed app config in the intermediate directory-->
<TransformXml Source="app.config" Destination="$(IntermediateOutputPath)$(TargetFileName).config" Transform="app.$(Configuration).config" />
<!--Force build process to use the transformed configuration file from now on.-->
<ItemGroup>
<AppConfigWithTargetPath Remove="app.config" />
<AppConfigWithTargetPath Include="$(IntermediateOutputPath)$(TargetFileName).config">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
</Target>
<!--Override After Publish to support ClickOnce AfterPublish. Target replaces the untransformed config file copied to the deployment directory with the transformed one.-->
<Target Name="AfterPublish">
<PropertyGroup>
<DeployedConfig>$(_DeploymentApplicationDir)$(TargetName)$(TargetExt).config$(_DeploymentFileMappingExtension)</DeployedConfig>
</PropertyGroup>
<!--Publish copies the untransformed App.config to deployment directory so overwrite it-->
<Copy Condition="Exists('$(DeployedConfig)')" SourceFiles="$(IntermediateOutputPath)$(TargetFileName).config" DestinationFiles="$(DeployedConfig)" />
</Target>
<Import Project="$(SlowCheetahTargets)" Condition="Exists('$(SlowCheetahTargets)')" Label="SlowCheetah" />
</Project>
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Properties/AssemblyInfo.cs
================================================
using System.Reflection;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("Etg.Yams.WorkerRole")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Etg.Yams.WorkerRole")]
[assembly: AssemblyCopyright("Copyright © 2015")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("3c42c4c6-7764-4559-967b-b8861a3856fb")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
================================================
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Properties/SlowCheetah/SlowCheetah.Transforms.targets
================================================
<?xml version="1.0" encoding="utf-8"?>
<!--
***********************************************************************************************
SlowCheetah.Transforms.targets
WARNING: DO NOT MODIFY this file, this file is added to your project automatically
through the SlowCheetah NuGet package. If you modify this file it may
get out of sync when you update the package at a later date.
This file defines the steps in order to transform XML files.
Copyright (C) Sayed Ibrahim Hashimi, Chuck England 2011-2013. All rights reserved.
***********************************************************************************************
-->
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<sc-MSBuildLibPathLocal Condition=" '$(sc-MSBuildLibPathLocal)'=='' ">$(LocalAppData)\Microsoft\MSBuild\SlowCheetah\v2.5.11\</sc-MSBuildLibPathLocal>
<!-- this property should be defined in the .csproj to point to the packages path -->
<SlowCheetahToolsPath Condition=" '$(SlowCheetahToolsPath)'=='' ">$(MSBuildThisFileDirectory)</SlowCheetahToolsPath>
<!-- if building in VS then we should try and use from app data if the files are there -->
<SlowCheetahTaskPath Condition=" '$(SlowCheetahTaskPath)'=='' and '$(BuildingInsideVisualStudio)'=='true' and Exists('$(sc-MSBuildLibPathLocal)SlowCheetah.Xdt.dll')">$(sc-MSBuildLibPathLocal)</SlowCheetahTaskPath>
<!-- this typically points to the packages folder -->
<SlowCheetahTaskPath Condition=" '$(SlowCheetahTaskPath)'==''">$(SlowCheetahToolsPath)</SlowCheetahTaskPath>
</PropertyGroup>
<ItemGroup>
<LocalAppDataFiles Include="$(sc-MSBuildLibPathLocal)**\*" />
</ItemGroup>
<Target Name="CopyAssembliesToLocalPath"
Condition=" '$(sc-MSBuildLibPathLocal)'!='' and ( !Exists('$(sc-MSBuildLibPathLocal)') or '@(LocalAppDataFiles)'=='' )">
<ItemGroup>
<_FilesToCopy Remove="@(_FilesToCopy)"/>
<_FilesToCopy Include="$(SlowCheetahToolsPath)Microsoft.Web.XmlTransform.dll"/>
<_FilesToCopy Include="$(SlowCheetahToolsPath)SlowCheetah.NuGet.template.proj"/>
<_FilesToCopy Include="$(SlowCheetahToolsPath)SlowCheetah.Transforms.targets"/>
<_FilesToCopy Include="$(SlowCheetahToolsPath)SlowCheetah.Xdt.dll"/>
</ItemGroup>
<MakeDir Directories="$(sc-MSBuildLibPathLocal)" ContinueOnError="true"/>
<Message Text="Copying SlowCheetah build files to [$(sc-MSBuildLibPathLocal)] if needed" />
<Message Text="SlowCheetahToolsPath: $(SlowCheetahToolsPath)" Importance="low" />
<Message Text="************ %40(_FilesToCopy): [@(_FilesToCopy)]" Importance="low"/>
<!-- If the copy does not succeed then we need to revert back to the packages folder -->
<Copy SourceFiles="@(_FilesToCopy)"
DestinationFiles="@(_FilesToCopy->'$(sc-MSBuildLibPathLocal)%(RecursiveDir)%(Filename)%(Extension)')"
SkipUnchangedFiles="true" ContinueOnError="true"
Condition="Exists('%(_FilesToCopy.FullPath)')" />
<PropertyGroup>
<sc-MSBuildLibPathLocal Condition=" !Exists('$(sc-MSBuildLibPathLocal)Microsoft.Web.XmlTransform.dll') ">$(SlowCheetahToolsPath)</sc-MSBuildLibPathLocal>
</PropertyGroup>
<Message Text="SlowCheetah tools path: sc-MSBuildLibPathLocal: [$(sc-MSBuildLibPathLocal)]" />
</Target>
<UsingTask TaskName="TransformXml"
AssemblyFile="$([MSBUILD]::Unescape($(SlowCheetahTaskPath)SlowCheetah.Xdt.dll))"/>
<ItemDefinitionGroup>
<!-- Set the default value to false here -->
<None>
<TransformOnBuild>false</TransformOnBuild>
<Link></Link>
</None>
<Content>
<TransformOnBuild>false</TransformOnBuild>
<Link></Link>
</Content>
<Resource>
<TransformOnBuild>false</TransformOnBuild>
<Link></Link>
</Resource>
<EmbeddedResource>
<TransformOnBuild>false</TransformOnBuild>
<Link></Link>
</EmbeddedResource>
<_FilesToTransform>
<IsAppConfig>false</IsAppConfig>
</_FilesToTransform>
</ItemDefinitionGroup>
<PropertyGroup>
<WapProjectTypeGuid>349c5851-65df-11da-9384-00065b846f21</WapProjectTypeGuid>
<_IsWap Condition=" '$(WapProjectTypeGuid)' != '' and '$(ProjectTypeGuids)' != '' ">$(ProjectTypeGuids.Contains($(WapProjectTypeGuid)))</_IsWap>
<_IsWap Condition=" '$(_IsWap)' == '' ">false</_IsWap>
<IsWap Condition=" '$(IsWap)' == ''">$(_IsWap)</IsWap>
<ScAllowCopyReferencedConfig Condition=" '$(ScAllowCopyReferencedConfig)'=='' ">true</ScAllowCopyReferencedConfig>
<AllowedReferenceRelatedFileExtensions Condition=" '$(ScAllowCopyReferencedConfig)'=='true' ">
$(AllowedReferenceRelatedFileExtensions);
.dll.config
</AllowedReferenceRelatedFileExtensions>
<SlowCheetahImport>$(MSBuildThisFileFullPath)</SlowCheetahImport>
<BuildDependsOn>
CopyAssembliesToLocalPath;
$(BuildDependsOn);
</BuildDependsOn>
<BuildDependsOn Condition=" '$(IsWap)'!='true' ">
$(BuildDependsOn);
TransformAllFiles;
ScReplaceAppConfigItem;
</BuildDependsOn>
<!--<TransformAllFilesDependsOn>
_CopyAppConfigFile;
DiscoverFilesToTransform;
</TransformAllFilesDependsOn>-->
<TransformAllFilesDependsOn>
CopyAssembliesToLocalPath;
DiscoverFilesToTransform;
</TransformAllFilesDependsOn>
</PropertyGroup>
<PropertyGroup>
<__SC_IntermediateAppConfig>$(IntermediateOutputPath)$(MSBuildProjectFile)-sc.App.config</__SC_IntermediateAppConfig>
</PropertyGroup>
<Target Name="TransformAllFiles"
DependsOnTargets="$(TransformAllFilesDependsOn)" BeforeTargets="_CopyAppConfigFile">
<!-- Now we have the item list _FilesToTransformNotAppConfig and _AppConfigToTransform item lists -->
<!-- Transform the app.config file -->
<ItemGroup>
<_AppConfigTarget Include="@(AppConfigWithTargetPath->'$(OutDir)%(TargetPath)')" />
</ItemGroup>
<PropertyGroup>
<_AppConfigDest>@(_AppConfigTarget->'%(FullPath)')</_AppConfigDest>
</PropertyGroup>
<ItemGroup>
<_TmpLinkFiles Remove="@(_TmpLinkFiles)" />
<_TmpLinkFiles Include="@(_FilesToTransformNotAppConfig->'%(Link)')" />
</ItemGroup>
<!-- This will handle non Link files and the second one for link files -->
<MakeDir Directories="@(_FilesToTransformNotAppConfig->'$(OutDir)%(RelativeDir)')"
Condition="Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)'=='' " />
<MakeDir Directories="@(_TmpLinkFiles->'$(OutDir)%(RelativeDir)')"
Condition=" '%(Link)'!='' " />
<PropertyGroup>
<_Sc_HasAppConfigTransform>false</_Sc_HasAppConfigTransform>
<_Sc_HasAppConfigConfigurationTransform Condition=" Exists( '@(_AppConfigToTransform->'%(RelativeDir)%(Filename).$(Configuration)%(Extension)')' ) ">true</_Sc_HasAppConfigConfigurationTransform>
<_Sc_HasAppConfigPublishProfileTransform Condition=" Exists( '@(_AppConfigToTransform->'%(RelativeDir)%(Filename).$(PublishProfile)%(Extension)')' ) ">true</_Sc_HasAppConfigPublishProfileTransform>
<_Sc_HasAppConfigPublishProfileTransform Condition=" '$(Configuration)'=='$(PublishProfile)' ">false</_Sc_HasAppConfigPublishProfileTransform>
<_Sc_HasAppConfigTransform Condition=" '$(_Sc_HasAppConfigConfigurationTransform)'=='true' ">true</_Sc_HasAppConfigTransform>
<_Sc_HasAppConfigTransform Condition=" '$(_Sc_HasAppConfigPublishProfileTransform)'=='true' ">true</_Sc_HasAppConfigTransform>
</PropertyGroup>
<Message Text="Tasks path: $(SlowCheetahTaskPath)" Importance="low"/>
<!-- we may transform the file multiple times so copy it to dest and then use that as source for all transforms -->
<Copy SourceFiles="$(AppConfig)" DestinationFiles="$(__SC_IntermediateAppConfig)"/>
<SlowCheetah.Xdt.TransformXml Source="$(__SC_IntermediateAppConfig)"
Transform="@(_AppConfigToTransform->'%(RelativeDir)%(Filename).$(Configuration)%(Extension)')"
Destination="$(__SC_IntermediateAppConfig)"
Condition=" '$(_Sc_HasAppConfigConfigurationTransform)'=='true' " />
<SlowCheetah.Xdt.TransformXml Source="$(__SC_IntermediateAppConfig)"
Transform="@(_AppConfigToTransform->'%(RelativeDir)%(Filename).$(PublishProfile)%(Extension)')"
Destination="$(__SC_IntermediateAppConfig)"
Condition=" '$(_Sc_HasAppConfigPublishProfileTransform)'=='true' " />
<PropertyGroup Condition=" '$(_Sc_HasAppConfigTransform)'=='true' " >
<AppConfig>$(__SC_IntermediateAppConfig)</AppConfig>
</PropertyGroup>
<ItemGroup Condition=" '$(_Sc_HasAppConfigTransform)'=='true' " >
<AppConfigWithTargetPath Remove="@(AppConfigWithTargetPath)" />
<AppConfigWithTargetPath Include="$(AppConfig)">
<TargetPath>$(TargetFileName).config</TargetPath>
</AppConfigWithTargetPath>
</ItemGroup>
<!--
For link files this will write the transformed file into the
incorrect location so let's handle those seperately in the transformation underneath this one
-->
<SlowCheetah.Xdt.TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')"
Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
Destination="@(_FilesToTransformNotAppConfig->'$(OutDir)%(RelativeDir)%(Filename)%(Extension)')"
Condition=" Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)'=='' " />
<!-- Transform the Link files -->
<SlowCheetah.Xdt.TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')"
Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
Destination="@(_FilesToTransformNotAppConfig->'$(OutDir)%(Link)')"
Condition="Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)'!='' " />
</Target>
<Target Name="DiscoverFilesToTransform">
<!--
This will look through items list: None & Content for those
with Metadata <TransformOnBuild>True</TransformOnBuild>.
-->
<ItemGroup>
<_FilesToTransform Include="@(None);@(Content);@(Resource);@(EmbeddedResource)"
Condition=" '%(TransformOnBuild)' == 'true' ">
<Link>%(Link)</Link>
<!-- Required to remove the item if necessary later -->
<OriginalItemSpec>%(Identity)</OriginalItemSpec>
</_FilesToTransform>
</ItemGroup>
<PropertyGroup>
<_AppConfigFullPath>@(AppConfigWithTargetPath->'%(RootDir)%(Directory)%(Filename)%(Extension)')</_AppConfigFullPath>
</PropertyGroup>
<!-- Now look to see if any of these are the app.config file -->
<ItemGroup>
<_FilesToTransform Condition=" '%(Filename)%(Extension)'=='app.config' ">
<IsAppConfig>true</IsAppConfig>
<!-- Required to remove the item if necessary later -->
<OriginalItemSpec>%(Identity)</OriginalItemSpec>
</_FilesToTransform>
</ItemGroup>
<ItemGroup>
<_FilesToTransformNotAppConfig Include="@(_FilesToTransform)"
Condition=" '%(IsAppConfig)'!='true'">
<!-- Required to remove the item if necessary later -->
<OriginalItemSpec>%(Identity)</OriginalItemSpec>
<Link>%(_FilesToTransform.Link)</Link>
</_FilesToTransformNotAppConfig>
<_AppConfigToTransform Include="@(_FilesToTransform)"
Condition=" '%(IsAppConfig)'=='true'"/>
</ItemGroup>
</Target>
<!-- ***********************************************************
WAP related items below
****************************************************************-->
<ItemGroup>
<!-- This will exclude packageRestore.proj from the web publish process -->
<ExcludeFromPackageFiles Include="packageRestore.proj">
<FromTarget>Project</FromTarget>
</ExcludeFromPackageFiles>
</ItemGroup>
<PropertyGroup Condition=" '$(IsWap)' == 'true' ">
<OnAfterPipelinePreDeployCopyAllFilesToOneFolder>
$(OnAfterPipelinePreDeployCopyAllFilesToOneFolder);
CopyTransformFilesWap;
</OnAfterPipelinePreDeployCopyAllFilesToOneFolder>
<CopyAllFilesToSingleFolderForMsdeploy>
$(CopyAllFilesToSingleFolderForMsdeploy);
CopyTransformFilesWap;
</CopyAllFilesToSingleFolderForMsdeploy>
<CopyTransformFilesWapDependsOn>
CoreCopyTransformFilesWap;
CopyTransformFileWapPublishProfile;
</CopyTransformFilesWapDependsOn>
<CoreCopyTransformFilesWapDependsOn>
DiscoverFilesToTransform;
</CoreCopyTransformFilesWapDependsOn>
<!-- For VS2012 -->
<PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
$(PipelineCopyAllFilesToOneFolderForMsdeployDependsOn);
CopyTransformFilesWap
</PipelineCopyAllFilesToOneFolderForMsdeployDependsOn>
<!-- Required for File System -->
<PipelinePreDeployCopyAllFilesToOneFolderDependsOn>
$(PipelinePreDeployCopyAllFilesToOneFolderDependsOn);
CopyTransformFilesWap;
</PipelinePreDeployCopyAllFilesToOneFolderDependsOn>
<!-- required for FS support from the VS publish dialog -->
<OnAfterCopyAllFilesToSingleFolderForPackage>
$(OnAfterCopyAllFilesToSingleFolderForPackage);
CopyTransformFilesWap;
</OnAfterCopyAllFilesToSingleFolderForPackage>
</PropertyGroup>
<Target Name="CopyTransformFilesWap" DependsOnTargets="$(CopyTransformFilesWapDependsOn)"/>
<Target Name="CoreCopyTransformFilesWap"
DependsOnTargets="$(CoreCopyTransformFilesWapDependsOn)">
<ItemGroup>
<_TmpLinkFiles Remove="@(_TmpLinkFiles)" />
<_TmpLinkFiles Include="@(_FilesToTransformNotAppConfig->'%(Link)')" />
</ItemGroup>
<!-- This will ignore link files and the second one will handle them -->
<MakeDir Directories="@(_FilesToTransformNotAppConfig->'$(_PackageTempDir)\%(RelativeDir)')"
Condition="Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)' == '' "/>
<MakeDir Directories="@(_TmpLinkFiles->'$(OutDir)%(RelativeDir)')"
Condition=" '%(Link)'!='' " />
<!--Make sure that we do not do this for web.config-->
<!-- This usage will skip Link files, the task usage below will handle Link files -->
<SlowCheetah.Xdt.TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')"
Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
Destination="@(_FilesToTransformNotAppConfig->'$(_PackageTempDir)\%(RelativeDir)%(Filename)%(Extension)')"
Condition=" '%(Filename)%(Extension)' != 'web.config' and
Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)'=='' " />
<!-- Transform the Link files, they always go into the root directory -->
<SlowCheetah.Xdt.TransformXml Source="@(_FilesToTransformNotAppConfig->'%(FullPath)')"
Transform="%(RelativeDir)%(Filename).$(Configuration)%(Extension)"
Destination="@(_FilesToTransformNotAppConfig->'$(_PackageTempDir)\%(Link)')"
Condition=" '%(Filename)%(Extension)' != 'web.config' and
Exists('%(RelativeDir)%(Filename).$(Configuration)%(Extension)')
and '%(Link)'!='' " />
</Target>
gitextract_py2cqu4t/
├── .gitattributes
├── .gitignore
├── Docs/
│ ├── Continuous_Integration.md
│ ├── Contributor_Guide.md
│ ├── Deploy&Host_an_App_in_YAMS.md
│ ├── Deploy_Orleans_App_in_YAMS.md
│ ├── Deploy_YAMS.md
│ ├── Overview.md
│ └── YAMS_Storage.md
├── Etg.Yams.sln
├── Etg.Yams.sln.DotSettings
├── LICENSE
├── README.md
├── SECURITY.md
├── Samples/
│ ├── Etg.Yams.ARM/
│ │ ├── Etg.Yams.ARM.sln
│ │ ├── Etg.Yams.Host/
│ │ │ ├── App.config
│ │ │ ├── Etg.Yams.Host.csproj
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ └── README.md
│ ├── Etg.Yams.Cloud/
│ │ ├── Backend/
│ │ │ ├── Backend.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Etg.Yams.Cloud.MultipleClusters/
│ │ │ ├── BackendContent/
│ │ │ │ ├── GCSettingsManagement.ps1
│ │ │ │ ├── ServerGC.cmd
│ │ │ │ └── diagnostics.wadcfgx
│ │ │ ├── Etg.Yams.Cloud.MultipleClusters.ccproj
│ │ │ ├── FrontendContent/
│ │ │ │ └── diagnostics.wadcfgx
│ │ │ ├── ServiceConfiguration.Cloud.cscfg
│ │ │ ├── ServiceConfiguration.Local.cscfg
│ │ │ └── ServiceDefinition.csdef
│ │ ├── Etg.Yams.Cloud.MultipleClusters.sln
│ │ ├── Etg.Yams.Cloud.SingleCluster/
│ │ │ ├── Etg.Yams.Cloud.SingleCluster.ccproj
│ │ │ ├── ServiceConfiguration.Cloud.cscfg
│ │ │ ├── ServiceConfiguration.Local.cscfg
│ │ │ ├── ServiceDefinition.csdef
│ │ │ └── SingleClusterRoleContent/
│ │ │ ├── GCSettingsManagement.ps1
│ │ │ ├── ServerGC.cmd
│ │ │ └── diagnostics.wadcfgx
│ │ ├── Etg.Yams.Cloud.SingleCluster.sln
│ │ ├── Etg.Yams.WorkerRole/
│ │ │ ├── Etg.Yams.WorkerRole.csproj
│ │ │ ├── Properties/
│ │ │ │ ├── AssemblyInfo.cs
│ │ │ │ └── SlowCheetah/
│ │ │ │ └── SlowCheetah.Transforms.targets
│ │ │ ├── Utils/
│ │ │ │ ├── AzureUtils.cs
│ │ │ │ └── DeploymentIdUtils.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── WorkerRoleConfig.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ ├── Frontend/
│ │ │ ├── Frontend.csproj
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── WorkerRole.cs
│ │ │ ├── app.config
│ │ │ └── packages.config
│ │ └── SingleClusterRole/
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── SingleClusterRole.csproj
│ │ ├── WorkerRole.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── OrleansApp/
│ │ ├── GrainInterfaces/
│ │ │ ├── GrainInterfaces.csproj
│ │ │ ├── IHelloGrain.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ ├── Grains/
│ │ │ ├── Grains.csproj
│ │ │ ├── HelloGrain.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ └── packages.config
│ │ ├── OrleansApp.sln
│ │ ├── SiloHost/
│ │ │ ├── App.config
│ │ │ ├── AppConfig.json
│ │ │ ├── OrleansHostWrapper.cs
│ │ │ ├── Program.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── SiloHost.csproj
│ │ │ └── packages.config
│ │ └── WebApp/
│ │ ├── App.config
│ │ ├── App.cs
│ │ ├── AppConfig.json
│ │ ├── ApplicationController.cs
│ │ ├── OrleansHelloController.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Startup.cs
│ │ ├── WebApp.csproj
│ │ └── packages.config
│ ├── Samples.sln
│ ├── WebApp/
│ │ ├── PublishScripts/
│ │ │ ├── AzureWebsitePublishModule.psm1
│ │ │ ├── Configurations/
│ │ │ │ └── WebApp-WAWS-dev.json
│ │ │ └── Publish-WebApplicationWebsite.ps1
│ │ ├── WebApp/
│ │ │ ├── App.config
│ │ │ ├── App.cs
│ │ │ ├── AppConfig.json
│ │ │ ├── ApplicationController.cs
│ │ │ ├── CoinFlipController.cs
│ │ │ ├── Properties/
│ │ │ │ └── AssemblyInfo.cs
│ │ │ ├── Startup.cs
│ │ │ ├── WebApp.csproj
│ │ │ └── packages.config
│ │ └── WebApp.sln
│ └── YamsStudio/
│ ├── AddNewApplicationDialog.xaml
│ ├── AddNewApplicationDialog.xaml.cs
│ ├── AddNewDeploymentDialog.xaml
│ ├── AddNewDeploymentDialog.xaml.cs
│ ├── App.config
│ ├── App.xaml
│ ├── App.xaml.cs
│ ├── BusyWindow.xaml
│ ├── BusyWindow.xaml.cs
│ ├── ConnectToStorageAccountDialog.xaml
│ ├── ConnectToStorageAccountDialog.xaml.cs
│ ├── DeploymentInfo.cs
│ ├── DeploymentRepositoryFactory.cs
│ ├── DeploymentRepositoryManager.cs
│ ├── IDeploymentRepositoryFactory.cs
│ ├── MainWindow.xaml
│ ├── MainWindow.xaml.cs
│ ├── Properties/
│ │ ├── AssemblyInfo.cs
│ │ ├── Resources.Designer.cs
│ │ ├── Resources.resx
│ │ ├── Settings.Designer.cs
│ │ └── Settings.settings
│ ├── SelectDirectoryControl.xaml
│ ├── SelectDirectoryControl.xaml.cs
│ ├── StorageAccountConnectionInfo.cs
│ ├── UpdateVersionDialog.xaml
│ ├── UpdateVersionDialog.xaml.cs
│ ├── YamsStudio.csproj
│ └── packages.config
├── src/
│ ├── AzureBlobStorageDeploymentRepository/
│ │ ├── AzureBlobStorageDeploymentRepository.csproj
│ │ ├── BlobStorageDeploymentRepository.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── AzureBlobStorageUpdateSession/
│ │ ├── AzureBlobStorageUpdateSession.csproj
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── UpdateSession/
│ │ │ ├── AzureStorageUpdateSessionDiModule.cs
│ │ │ ├── AzureTableUpdateSessionManager.cs
│ │ │ ├── IUpdateBlob.cs
│ │ │ ├── IUpdateBlobFactory.cs
│ │ │ ├── IUpdateSessionTable.cs
│ │ │ ├── Retry/
│ │ │ │ ├── LockUpdateBlobErrorDetectionStrategy.cs
│ │ │ │ ├── StartUpdateSessionRetryDecorator.cs
│ │ │ │ ├── StorageExceptionErrorDetectionStrategy.cs
│ │ │ │ ├── StorageExceptionUpdateSessionRetryDecorator.cs
│ │ │ │ └── UpdateBlobFactoryRetryLockDecorator.cs
│ │ │ ├── UpdateBlob.cs
│ │ │ ├── UpdateBlobFactory.cs
│ │ │ ├── UpdateBlobUnavailableException.cs
│ │ │ ├── UpdateDomainEntity.cs
│ │ │ ├── UpdateSessionStatus.cs
│ │ │ ├── UpdateSessionTable.cs
│ │ │ └── UpdateSessionTransaction.cs
│ │ └── packages.config
│ ├── AzureBlobUtils/
│ │ ├── AzureBlobUtils.csproj
│ │ ├── BlobUtils.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ └── packages.config
│ ├── AzureUtils/
│ │ ├── AzureUtils.csproj
│ │ ├── Lease/
│ │ │ ├── BlobLeaseFactory.cs
│ │ │ ├── IBlobLease.cs
│ │ │ ├── IBlobLeaseFactory.cs
│ │ │ └── SelfRenewableBlobLease.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Utils/
│ │ │ └── BlobUtils.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── Common/
│ │ ├── Common.csproj
│ │ ├── FileUtils.cs
│ │ ├── Json/
│ │ │ ├── IJsonSerializer.cs
│ │ │ └── JsonSerializer.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Utils/
│ │ │ ├── DictionaryUtils.cs
│ │ │ ├── FileUtils.cs
│ │ │ ├── HashCodeUtils.cs
│ │ │ ├── TaskExtensions.cs
│ │ │ └── TraceUtils.cs
│ │ └── packages.config
│ ├── Etg.Yams/
│ │ ├── Etg.Yams.csproj
│ │ ├── Etg.Yams.nuspec
│ │ ├── NuGetPack.bat
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── YamsServiceFactory.cs
│ │ ├── app.config
│ │ └── packages.config
│ ├── Etg.Yams.Client/
│ │ ├── Etg.Yams.Client.csproj
│ │ ├── Etg.Yams.Client.nuspec
│ │ ├── IProcessArgsParser.cs
│ │ ├── IYamsClient.cs
│ │ ├── IYamsClientFactory.cs
│ │ ├── NuGetPack.bat
│ │ ├── ProcessArgsParser.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── YamsClient.cs
│ │ ├── YamsClientConfig.cs
│ │ ├── YamsClientConfigBuilder.cs
│ │ ├── YamsClientFactory.cs
│ │ ├── YamsClientOptions.cs
│ │ └── packages.config
│ ├── Etg.Yams.Core/
│ │ ├── Application/
│ │ │ ├── AppIdentity.cs
│ │ │ ├── Application.cs
│ │ │ ├── ApplicationConfig.cs
│ │ │ ├── ApplicationConfigParser.cs
│ │ │ ├── ApplicationConfigSymbolResolver.cs
│ │ │ ├── ApplicationPool.cs
│ │ │ ├── ConfigurableApplication.cs
│ │ │ ├── ConfigurableApplicationFactory.cs
│ │ │ ├── IApplication.cs
│ │ │ ├── IApplicationConfigParser.cs
│ │ │ ├── IApplicationConfigSymbolResolver.cs
│ │ │ ├── IApplicationFactory.cs
│ │ │ └── IApplicationPool.cs
│ │ ├── Constants.cs
│ │ ├── Deploy/
│ │ │ ├── AndDeploymentMatcher.cs
│ │ │ ├── ClusterIdDeploymentMatcher.cs
│ │ │ ├── IAppDeploymentMatcher.cs
│ │ │ ├── IApplicationDeploymentDirectory.cs
│ │ │ ├── PropertiesDeploymentMatcher.cs
│ │ │ └── RemoteApplicationDeploymentDirectory.cs
│ │ ├── Download/
│ │ │ ├── ApplicationDownloader.cs
│ │ │ └── IApplicationDownloader.cs
│ │ ├── Etg.Yams.Core.csproj
│ │ ├── IYamsService.cs
│ │ ├── Install/
│ │ │ ├── AppInstallConfig.cs
│ │ │ ├── ApplicationInstaller.cs
│ │ │ └── IApplicationInstaller.cs
│ │ ├── Os/
│ │ │ ├── ISystem.cs
│ │ │ ├── System.cs
│ │ │ └── SystemExtensions.cs
│ │ ├── Process/
│ │ │ ├── AbstractProcessDecorator.cs
│ │ │ ├── GracefullShutdownProcessDecorator.cs
│ │ │ ├── HealthProcessDecorator.cs
│ │ │ ├── IProcess.cs
│ │ │ ├── IProcessFactory.cs
│ │ │ ├── IProcessStopper.cs
│ │ │ ├── MonitorInitProcessDecorator.cs
│ │ │ ├── Process.cs
│ │ │ ├── ProcessFactory.cs
│ │ │ ├── ProcessStopper.cs
│ │ │ └── SelfRestartingProcess.cs
│ │ ├── Properties/
│ │ │ └── AssemblyInfo.cs
│ │ ├── Storage/
│ │ │ ├── BinariesNotFoundException.cs
│ │ │ ├── Config/
│ │ │ │ ├── AppDeploymentConfig.cs
│ │ │ │ ├── DeploymentConfig.cs
│ │ │ │ ├── IDeploymentConfigSerializer.cs
│ │ │ │ └── JsonDeploymentConfigSerializer.cs
│ │ │ ├── ConflictResolutionMode.cs
│ │ │ ├── DuplicateBinariesException.cs
│ │ │ ├── IDeploymentRepository.cs
│ │ │ ├── IDeploymentStatusReader.cs
│ │ │ ├── IDeploymentStatusWriter.cs
│ │ │ └── Status/
│ │ │ ├── AppDeploymentStatus.cs
│ │ │ ├── ClusterDeploymentStatus.cs
│ │ │ ├── DeploymentStatus.cs
│ │ │ ├── IDeploymentStatusSerializer.cs
│ │ │ ├── InstanceDeploymentStatus.cs
│ │ │ └── JsonDeploymentStatusSerializer.cs
│ │ ├── Update/
│ │ │ ├── ApplicationUpdateManager.cs
│ │ │ ├── IApplicationUpdateManager.cs
│ │ │ └── IUpdateSessionManager.cs
│ │ ├── Utils/
│ │ │ ├── ApplicationUtils.cs
│ │ │ ├── EnvironmentUtils.cs
│ │ │ └── ProcessUtils.cs
│ │ ├── Watcher/
│ │ │ ├── DeploymentWatcher.cs
│ │ │ └── IDeploymentWatcher.cs
│ │ ├── YamsConfig.cs
│ │ ├── YamsConfigBuilder.cs
│ │ ├── YamsDiModule.cs
│ │ ├── YamsService.cs
│ │ └── packages.config
│ ├── Etg.Yams.Host/
│ │ ├── App.config
│ │ ├── Etg.Yams.Host.csproj
│ │ ├── Program.cs
│ │ └── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Etg.Yams.Ipc/
│ │ ├── Etg.Yams.Ipc.csproj
│ │ ├── IIpcConnection.cs
│ │ ├── INamedPipe.cs
│ │ ├── INamedPipeFactory.cs
│ │ ├── IpcConnection.cs
│ │ ├── NamedPipeClientAdapter.cs
│ │ ├── NamedPipeFactory.cs
│ │ ├── NamedPipeServerAdapter.cs
│ │ └── Properties/
│ │ └── AssemblyInfo.cs
│ └── Etg.Yams.Powershell/
│ ├── ConnectDeploymentRepositoryCmdlet.cs
│ ├── Etg.Yams.Powershell.csproj
│ ├── Etg.Yams.Powershell.nuspec
│ ├── GetDeploymentConfigCmdlet.cs
│ ├── GetDeploymentStatusCmdlet.cs
│ ├── InstallApplicationsCmdlet.cs
│ ├── NuGetPack.bat
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SetDeploymentConfigCmdlet.cs
│ ├── UninstallApplicationsCmdlet.cs
│ ├── app.config
│ └── packages.config
└── test/
├── AzureBlobStorageDeploymentRepositoryTest/
│ ├── AzureBlobStorageDeploymentRepositoryTest.csproj
│ ├── BlobStorageDeploymentRepositoryTest.cs
│ ├── Data/
│ │ └── DeploymentRepository/
│ │ └── DeploymentConfig.json
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── AzureBlobStorageUpdateSessionTest/
│ ├── AzureBlobStorageUpdateSessionTest.csproj
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SimpleStubs.json
│ ├── UpdateSession/
│ │ ├── AzureTableUpdateSessionManagerTests.cs
│ │ ├── Retry/
│ │ │ ├── UpdateBlobFactoryRetryLockDecoratorTest.cs
│ │ │ └── UpdateSessionManagerRetryDecoratorTest.cs
│ │ └── UpdateBlobTest.cs
│ └── packages.config
├── AzureTestUtils/
│ ├── AzureStorageEmulatorProxy.cs
│ ├── AzureTestUtils.csproj
│ ├── Fixtures/
│ │ └── AzureStorageEmulatorTestFixture.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── AzureUtilsTest/
│ ├── AzureUtilsTest.csproj
│ ├── BlobUtilsTest.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── Etg.Yams.Core.Test/
│ ├── Application/
│ │ ├── ApplicationConfigParserTest.cs
│ │ ├── ApplicationConfigSymbolResolverTest.cs
│ │ ├── ApplicationPoolTest.cs
│ │ └── ApplicationTest.cs
│ ├── Client/
│ │ └── YamsProcessArgsParserTest.cs
│ ├── Data/
│ │ ├── ApplicationConfigParser/
│ │ │ └── AppConfig.json
│ │ ├── ApplicationPool/
│ │ │ └── test.myapp/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.0.1/
│ │ │ └── AppConfig.json
│ │ ├── DeploymentConfig/
│ │ │ └── DeploymentConfig.json
│ │ └── EndToEndTest/
│ │ ├── DeploymentConfig.json
│ │ ├── DeploymentConfigFullIpcApp.json
│ │ ├── DeploymentConfigGracefulShutdownApp.json
│ │ ├── DeploymentConfigHeartBeatApp.json
│ │ ├── DeploymentConfigMonitorInitApp.json
│ │ ├── DeploymentConfigNoApps.json
│ │ ├── DeploymentConfigUpdate.json
│ │ ├── DeploymentConfigWithProperties.json
│ │ ├── FullIpcApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── GracefulShutdownApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── HeartBeatApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── MonitorInitApp/
│ │ │ └── 1.0.0/
│ │ │ └── AppConfig.json
│ │ ├── test.app1/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.0.1/
│ │ │ └── AppConfig.json
│ │ ├── test.app2/
│ │ │ ├── 1.1.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 2.0.0-beta/
│ │ │ └── AppConfig.json
│ │ ├── test.app3/
│ │ │ ├── 1.0.0/
│ │ │ │ └── AppConfig.json
│ │ │ └── 1.1.0/
│ │ │ └── AppConfig.json
│ │ └── test.app4/
│ │ └── 1.0.0/
│ │ └── AppConfig.json
│ ├── EndToEndTest.cs
│ ├── Etg.Yams.Core.Test.csproj
│ ├── Etg.Yams.Test.xunit.runner.json
│ ├── Install/
│ │ └── ApplicationInstallerTest.cs
│ ├── Process/
│ │ ├── GracefulShutdownProcessDecoratorTest.cs
│ │ ├── ProcessStopperTest.cs
│ │ ├── ProcessTest.cs
│ │ └── SelfRestartingProcessTest.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── Storage/
│ │ ├── DeploymentConfigTest.cs
│ │ └── LocalDeploymentRepository.cs
│ ├── System/
│ │ └── SystemExtensionsTest.cs
│ ├── Update/
│ │ └── ApplicationUpdateManagerTest.cs
│ ├── Utils/
│ │ ├── AssertUtils.cs
│ │ └── TestUtils.cs
│ ├── app.config
│ ├── packages.config
│ └── stubs/
│ ├── ApplicationFactoryStub.cs
│ ├── ApplicationInstallerStub.cs
│ ├── ApplicationPoolStub.cs
│ ├── ApplicationStub.cs
│ └── ProcessStub.cs
├── FullIpcProcess/
│ ├── App.config
│ ├── FullIpcProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── GracefullShutdownProcess/
│ ├── GracefullShutdownProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── HangingProcess/
│ ├── App.config
│ ├── HangingProcess.csproj
│ ├── Program.cs
│ └── Properties/
│ └── AssemblyInfo.cs
├── HeartBeatProcess/
│ ├── App.config
│ ├── HeartBeatProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── packages.config
├── MonitorInitProcess/
│ ├── MonitorInitProcess.csproj
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── app.config
│ └── packages.config
├── Stubs/
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ ├── SimpleStubs.json
│ ├── Stubs.csproj
│ └── packages.config
├── SuicidalProcess/
│ ├── App.config
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── SuicidalProcess.csproj
├── TestProcess/
│ ├── App.config
│ ├── Program.cs
│ ├── Properties/
│ │ └── AssemblyInfo.cs
│ └── TestProcess.csproj
└── TestUtils/
├── AssertUtils.cs
├── AsyncUtils.cs
├── Properties/
│ └── AssemblyInfo.cs
├── TestUtils.csproj
└── packages.config
SYMBOL INDEX (1041 symbols across 198 files)
FILE: Samples/Etg.Yams.ARM/Etg.Yams.Host/Program.cs
class Program (line 17) | class Program
method Main (line 28) | [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermiss...
class YamsConfigBuilderExtensions (line 104) | public static class YamsConfigBuilderExtensions
method AddClusterProperties (line 106) | public static YamsConfigBuilder AddClusterProperties(this YamsConfigBu...
class HostConfigurationExtensions (line 118) | public static class HostConfigurationExtensions
method AddCommandLineArgumentsToStartupParameters (line 123) | public static void AddCommandLineArgumentsToStartupParameters(this Hos...
method IsTopShelfArgument (line 145) | private static bool IsTopShelfArgument(string argument)
FILE: Samples/Etg.Yams.Cloud/Backend/WorkerRole.cs
class WorkerRole (line 5) | public class WorkerRole : YamsWorkerRole
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Utils/AzureUtils.cs
class AzureUtils (line 5) | public static class AzureUtils
method IsEmulator (line 7) | public static bool IsEmulator()
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Utils/DeploymentIdUtils.cs
class DeploymentIdUtils (line 5) | public static class DeploymentIdUtils
method GetYamsClusterId (line 7) | public static string GetYamsClusterId(bool isSingleClusterDeployment)
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/WorkerRole.cs
class YamsWorkerRole (line 12) | public class YamsWorkerRole : RoleEntryPoint
method Run (line 21) | [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermiss...
method RunAsync (line 27) | public async Task RunAsync()
method OnStart (line 60) | public override bool OnStart()
method OnStop (line 70) | public override void OnStop()
method StopAsync (line 75) | public async Task StopAsync()
method RoleEnvironmentChanging (line 87) | private void RoleEnvironmentChanging(object sender, RoleEnvironmentCha...
FILE: Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/WorkerRoleConfig.cs
class WorkerRoleConfig (line 6) | public class WorkerRoleConfig
method WorkerRoleConfig (line 8) | public WorkerRoleConfig()
FILE: Samples/Etg.Yams.Cloud/Frontend/WorkerRole.cs
class WorkerRole (line 5) | public class WorkerRole : YamsWorkerRole
FILE: Samples/Etg.Yams.Cloud/SingleClusterRole/WorkerRole.cs
class WorkerRole (line 5) | public class WorkerRole : YamsWorkerRole
FILE: Samples/OrleansApp/GrainInterfaces/IHelloGrain.cs
type IHelloGrain (line 9) | public interface IHelloGrain : IGrainWithIntegerKey
method SayHello (line 11) | Task<string> SayHello();
FILE: Samples/OrleansApp/Grains/HelloGrain.cs
class HelloGrain (line 10) | public class HelloGrain : Grain, IHelloGrain
method SayHello (line 12) | public Task<string> SayHello()
FILE: Samples/OrleansApp/SiloHost/OrleansHostWrapper.cs
class OrleansHostWrapper (line 9) | class OrleansHostWrapper
method OrleansHostWrapper (line 13) | public OrleansHostWrapper(ClusterConfiguration config, string[] args)
method Run (line 30) | public int Run()
method Stop (line 61) | public int Stop()
class SiloArgs (line 81) | private class SiloArgs
method SiloArgs (line 83) | public SiloArgs(string siloName, string deploymentId)
method ParseArguments (line 89) | public static SiloArgs ParseArguments(string[] args)
method PrintUsage (line 145) | public static void PrintUsage()
FILE: Samples/OrleansApp/SiloHost/Program.cs
class Program (line 11) | public class Program
method Main (line 14) | static int Main(string[] args)
method StartSilo (line 27) | private static int StartSilo(string[] args)
method ShutdownSilo (line 44) | private static int ShutdownSilo()
FILE: Samples/OrleansApp/WebApp/App.cs
class App (line 12) | public class App
method Main (line 18) | static void Main(string[] args)
method GetIpAddress (line 68) | private static string GetIpAddress()
FILE: Samples/OrleansApp/WebApp/ApplicationController.cs
class ApplicationController (line 7) | [RoutePrefix("application")]
method GetInfo (line 10) | [Route("info")]
FILE: Samples/OrleansApp/WebApp/OrleansHelloController.cs
class OrleansHelloController (line 9) | [RoutePrefix("orleans")]
method SayHello (line 12) | [HttpGet]
FILE: Samples/OrleansApp/WebApp/Startup.cs
class Startup (line 7) | class Startup
method Configuration (line 11) | public void Configuration(IAppBuilder appBuilder)
FILE: Samples/WebApp/WebApp/App.cs
class App (line 14) | public class App
method Main (line 23) | public static void Main(string[] args)
method MainAsync (line 28) | private static async Task MainAsync(string[] args)
method GetIpAddress (line 61) | private static string GetIpAddress()
FILE: Samples/WebApp/WebApp/ApplicationController.cs
class ApplicationController (line 7) | [RoutePrefix("application")]
method GetInfo (line 10) | [Route("info")]
FILE: Samples/WebApp/WebApp/CoinFlipController.cs
class CoinFlipController (line 6) | [RoutePrefix("coinflip")]
method Run (line 11) | [HttpGet]
FILE: Samples/WebApp/WebApp/Startup.cs
class Startup (line 7) | class Startup
method Configuration (line 11) | public void Configuration(IAppBuilder appBuilder)
FILE: Samples/YamsStudio/AddNewApplicationDialog.xaml.cs
class AddNewApplicationDialog (line 10) | public partial class AddNewApplicationDialog : Window
method AddNewApplicationDialog (line 12) | public AddNewApplicationDialog(string appId, string version, string de...
method AddNewApplicationDialog (line 21) | public AddNewApplicationDialog() : this(null, null, null)
method AddNewApplicationDialog (line 25) | public AddNewApplicationDialog(string appId) : this(appId, null, null)
method AddNewApplicationDialog (line 29) | public AddNewApplicationDialog(string appId, string version) : this(ap...
method Window_ContentRendered (line 33) | private void Window_ContentRendered(object sender, EventArgs e)
method OnOk (line 39) | private void OnOk(object sender, RoutedEventArgs e)
FILE: Samples/YamsStudio/AddNewDeploymentDialog.xaml.cs
class AddNewDeploymentDialog (line 9) | public partial class AddNewDeploymentDialog : Window
method AddNewDeploymentDialog (line 11) | public AddNewDeploymentDialog(string appId, string version)
method Window_ContentRendered (line 19) | private void Window_ContentRendered(object sender, EventArgs e)
method OnOk (line 25) | private void OnOk(object sender, RoutedEventArgs e)
FILE: Samples/YamsStudio/App.xaml.cs
class App (line 14) | public partial class App : Application
FILE: Samples/YamsStudio/BusyWindow.xaml.cs
class BusyWindow (line 8) | public partial class BusyWindow : Window
method BusyWindow (line 10) | public BusyWindow()
FILE: Samples/YamsStudio/ConnectToStorageAccountDialog.xaml.cs
class ConnectToStorageAccountDialog (line 20) | public partial class ConnectToStorageAccountDialog : Window
method ConnectToStorageAccountDialog (line 22) | public ConnectToStorageAccountDialog()
method OnOk (line 27) | private void OnOk(object sender, RoutedEventArgs e)
method Window_ContentRendered (line 32) | private void Window_ContentRendered(object sender, EventArgs e)
FILE: Samples/YamsStudio/DeploymentInfo.cs
class DeploymentInfo (line 5) | public class DeploymentInfo
method DeploymentInfo (line 7) | public DeploymentInfo(AppIdentity appIdentity, string deploymentId)
FILE: Samples/YamsStudio/DeploymentRepositoryFactory.cs
class DeploymentRepositoryFactory (line 13) | public class DeploymentRepositoryFactory : IDeploymentRepositoryFactory
method CreateRepository (line 15) | public IDeploymentRepository CreateRepository(string connectionString)
FILE: Samples/YamsStudio/DeploymentRepositoryManager.cs
class DeploymentRepositoryManager (line 6) | public class DeploymentRepositoryManager
method DeploymentRepositoryManager (line 11) | public DeploymentRepositoryManager(IDeploymentRepositoryFactory connec...
method GetRepository (line 16) | public IDeploymentRepository GetRepository(StorageAccountConnectionInf...
FILE: Samples/YamsStudio/IDeploymentRepositoryFactory.cs
type IDeploymentRepositoryFactory (line 5) | public interface IDeploymentRepositoryFactory
method CreateRepository (line 7) | IDeploymentRepository CreateRepository(string connectionString);
FILE: Samples/YamsStudio/MainWindow.xaml.cs
class MainWindow (line 25) | public partial class MainWindow : Window
method MainWindow (line 36) | public MainWindow()
method OnClosing (line 66) | protected override void OnClosing(CancelEventArgs e)
method OnAddNewConnection (line 74) | private void OnAddNewConnection(object sender, RoutedEventArgs e)
method OnDeleteConnection (line 85) | private void OnDeleteConnection(object sender, RoutedEventArgs e)
method OnAddApplication (line 96) | private async void OnAddApplication(object sender, RoutedEventArgs e)
method AddApplication (line 107) | private async Task AddApplication(AppIdentity appIdentity, string depl...
method RefreshAll (line 119) | private async Task RefreshAll()
method SaveLocalDeploymentConfig (line 126) | private void SaveLocalDeploymentConfig(StorageAccountConnectionInfo co...
method SaveLocalDeploymentConfig (line 132) | private void SaveLocalDeploymentConfig(StorageAccountConnectionInfo co...
method GetCurrentConnection (line 138) | private StorageAccountConnectionInfo GetCurrentConnection()
method OnRemoveApplication (line 143) | private async void OnRemoveApplication(object sender, RoutedEventArgs e)
method OnAddNewVersion (line 152) | private async void OnAddNewVersion(object sender, RoutedEventArgs e)
method OnVersionAddDeployment (line 164) | private void OnVersionAddDeployment(object sender, RoutedEventArgs e)
method OnUpdateVersion (line 178) | private async void OnUpdateVersion(object sender, RoutedEventArgs e)
method OnRemoveVersion (line 201) | private void OnRemoveVersion(object sender, RoutedEventArgs e)
method OnRemoveDeployment (line 220) | private void OnRemoveDeployment(object sender, RoutedEventArgs e)
method GetSelectedVersion (line 233) | private string GetSelectedVersion()
method OnPublishToBlob (line 238) | private async void OnPublishToBlob(object sender, RoutedEventArgs e)
method OnSyncFromBlob (line 248) | private async void OnSyncFromBlob(object sender, RoutedEventArgs e)
method OnEditDeploymentConfig (line 261) | private void OnEditDeploymentConfig(object sender, RoutedEventArgs e)
method RefreshView (line 267) | private void RefreshView(object itemsSource)
method OnConnectionSelected (line 273) | private async void OnConnectionSelected(object sender, SelectionChange...
method HandleConnectionSelection (line 281) | private async Task HandleConnectionSelection()
method OnDeploymentConfigFileChanged (line 299) | private async void OnDeploymentConfigFileChanged(object sender, FileSy...
method FetchDeploymentConfig (line 304) | private async Task<DeploymentConfig> FetchDeploymentConfig(StorageAcco...
method GetDeploymentConfigLocalPath (line 317) | private string GetDeploymentConfigLocalPath(string accountName)
method OnAppSelected (line 322) | private void OnAppSelected(object sender, SelectionChangedEventArgs e)
method HandleAppSelection (line 327) | private void HandleAppSelection()
method GetSelectedAppId (line 344) | private string GetSelectedAppId()
method OnVersionSelected (line 349) | private void OnVersionSelected(object sender, SelectionChangedEventArg...
method HandleVersionSelection (line 354) | private void HandleVersionSelection()
FILE: Samples/YamsStudio/Properties/Resources.Designer.cs
class Resources (line 22) | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resource...
method Resources (line 31) | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Mic...
FILE: Samples/YamsStudio/Properties/Settings.Designer.cs
class Settings (line 14) | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
FILE: Samples/YamsStudio/SelectDirectoryControl.xaml.cs
class SelectDirectoryControl (line 9) | public partial class SelectDirectoryControl : System.Windows.Controls.Us...
method SelectDirectoryControl (line 13) | public SelectDirectoryControl()
method OnBrowse (line 18) | private void OnBrowse(object sender, RoutedEventArgs e)
FILE: Samples/YamsStudio/StorageAccountConnectionInfo.cs
class StorageAccountConnectionInfo (line 3) | public class StorageAccountConnectionInfo
method StorageAccountConnectionInfo (line 5) | public StorageAccountConnectionInfo(string accountName, string connect...
FILE: Samples/YamsStudio/UpdateVersionDialog.xaml.cs
class UpdateVersionDialog (line 10) | public partial class UpdateVersionDialog : Window
method UpdateVersionDialog (line 12) | public UpdateVersionDialog(string appName, string currentVersion, IEnu...
method Window_ContentRendered (line 24) | private void Window_ContentRendered(object sender, EventArgs e)
method OnOk (line 48) | private void OnOk(object sender, RoutedEventArgs e)
FILE: src/AzureBlobStorageDeploymentRepository/BlobStorageDeploymentRepository.cs
class BlobStorageDeploymentRepository (line 18) | public class BlobStorageDeploymentRepository : IDeploymentRepository, ID...
method BlobStorageDeploymentRepository (line 25) | public BlobStorageDeploymentRepository(CloudBlobContainer blobContaine...
method BlobStorageDeploymentRepository (line 33) | public BlobStorageDeploymentRepository(string connectionString, IDeplo...
method Create (line 39) | public static BlobStorageDeploymentRepository Create(string connection...
method GetApplicationsContainerReference (line 47) | private static CloudBlobContainer GetApplicationsContainerReference(st...
method DeleteApplicationBinaries (line 54) | public async Task DeleteApplicationBinaries(AppIdentity appIdentity)
method FetchDeploymentConfig (line 65) | public async Task<DeploymentConfig> FetchDeploymentConfig()
method HasApplicationBinaries (line 78) | public Task<bool> HasApplicationBinaries(AppIdentity appIdentity)
method DownloadApplicationBinaries (line 83) | public async Task DownloadApplicationBinaries(AppIdentity appIdentity,...
method PublishDeploymentConfig (line 107) | public Task PublishDeploymentConfig(DeploymentConfig deploymentConfig)
method UploadApplicationBinaries (line 113) | public async Task UploadApplicationBinaries(AppIdentity appIdentity, s...
method GetBlobDirectory (line 149) | private CloudBlobDirectory GetBlobDirectory(AppIdentity appIdentity)
method GetBlobDirectoryRelPath (line 155) | private string GetBlobDirectoryRelPath(AppIdentity appIdentity)
method FetchClusterDeploymentStatus (line 160) | public async Task<ClusterDeploymentStatus> FetchClusterDeploymentStatu...
method FetchInstanceDeploymentStatus (line 198) | public async Task<InstanceDeploymentStatus> FetchInstanceDeploymentSta...
method GetClusterStatusRelativePath (line 209) | private static string GetClusterStatusRelativePath(string clusterId)
method GetInstanceStatusRelativePath (line 214) | private static string GetInstanceStatusRelativePath(string clusterId, ...
method FetchInstanceDeploymentStatus (line 219) | private async Task<InstanceDeploymentStatus> FetchInstanceDeploymentSt...
method PublishInstanceDeploymentStatus (line 225) | public Task PublishInstanceDeploymentStatus(string clusterId, string i...
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/AzureStorageUpdateSessionDiModule.cs
class AzureStorageUpdateSessionDiModule (line 9) | public class AzureStorageUpdateSessionDiModule
method AzureStorageUpdateSessionDiModule (line 14) | public AzureStorageUpdateSessionDiModule(
method AzureStorageUpdateSessionDiModule (line 31) | public AzureStorageUpdateSessionDiModule(IContainer container)
method RegisterTypes (line 36) | public static ContainerBuilder RegisterTypes(
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/AzureTableUpdateSessionManager.cs
class AzureTableUpdateSessionManager (line 8) | public class AzureTableUpdateSessionManager : IUpdateSessionManager
method AzureTableUpdateSessionManager (line 16) | public AzureTableUpdateSessionManager(IUpdateSessionTable updateSessio...
method TryStartUpdateSession (line 25) | public async Task<bool> TryStartUpdateSession()
method EndUpdateSession (line 80) | public async Task EndUpdateSession()
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateBlob.cs
type IUpdateBlob (line 7) | public interface IUpdateBlob : IDisposable
method AddInstance (line 9) | void AddInstance(string instanceId);
method RemoveInstance (line 10) | void RemoveInstance(string instanceId);
method GetUpdateDomain (line 11) | string GetUpdateDomain();
method GetInstanceIds (line 12) | ISet<string> GetInstanceIds();
method TryLock (line 13) | Task<bool> TryLock();
method FlushAndRelease (line 14) | Task FlushAndRelease();
method SetUpdateDomain (line 15) | void SetUpdateDomain(string updateDomain);
method Release (line 16) | Task Release();
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateBlobFactory.cs
type IUpdateBlobFactory (line 5) | public interface IUpdateBlobFactory
method TryLockUpdateBlob (line 7) | Task<IUpdateBlob> TryLockUpdateBlob(string appId);
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateSessionTable.cs
type IUpdateSessionTable (line 5) | public interface IUpdateSessionTable
method FetchUpdateSessionStatus (line 7) | Task<UpdateSessionStatus> FetchUpdateSessionStatus(string clusterId);
method TryExecuteTransaction (line 8) | Task<bool> TryExecuteTransaction(UpdateSessionTransaction transaction);
method DeleteInstanceEntity (line 9) | Task DeleteInstanceEntity(string clusterId, string instanceId);
method GetActiveUpdateDomain (line 10) | Task<string> GetActiveUpdateDomain(string clusterId);
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/Retry/LockUpdateBlobErrorDetectionStrategy.cs
class LockUpdateBlobErrorDetectionStrategy (line 6) | public class LockUpdateBlobErrorDetectionStrategy : ITransientErrorDetec...
method IsTransient (line 8) | public bool IsTransient(Exception ex)
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StartUpdateSessionRetryDecorator.cs
class StartUpdateSessionRetryDecorator (line 7) | public class StartUpdateSessionRetryDecorator : IUpdateSessionManager
method StartUpdateSessionRetryDecorator (line 13) | public StartUpdateSessionRetryDecorator(IUpdateSessionManager updateSe...
method TryStartUpdateSession (line 21) | public async Task<bool> TryStartUpdateSession()
method EndUpdateSession (line 40) | public Task EndUpdateSession()
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StorageExceptionErrorDetectionStrategy.cs
class StorageExceptionErrorDetectionStrategy (line 8) | public class StorageExceptionErrorDetectionStrategy : ITransientErrorDet...
method IsTransient (line 10) | public bool IsTransient(Exception ex)
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StorageExceptionUpdateSessionRetryDecorator.cs
class StorageExceptionUpdateSessionRetryDecorator (line 7) | public class StorageExceptionUpdateSessionRetryDecorator : IUpdateSessio...
method StorageExceptionUpdateSessionRetryDecorator (line 12) | public StorageExceptionUpdateSessionRetryDecorator(IUpdateSessionManag...
method TryStartUpdateSession (line 20) | public Task<bool> TryStartUpdateSession()
method EndUpdateSession (line 25) | public Task EndUpdateSession()
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/Retry/UpdateBlobFactoryRetryLockDecorator.cs
class UpdateBlobFactoryRetryLockDecorator (line 6) | public class UpdateBlobFactoryRetryLockDecorator : IUpdateBlobFactory
method UpdateBlobFactoryRetryLockDecorator (line 11) | public UpdateBlobFactoryRetryLockDecorator(IUpdateBlobFactory updateBl...
method TryLockUpdateBlob (line 17) | public Task<IUpdateBlob> TryLockUpdateBlob(string appId)
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlob.cs
class UpdateBlob (line 13) | public class UpdateBlob : IUpdateBlob
method UpdateBlob (line 25) | public UpdateBlob(ICloudBlob blob, IBlobLeaseFactory blobLeaseFactory)
method SetUpdateDomain (line 33) | public void SetUpdateDomain(string updateDomain)
method EnsureThatBlobIsLocked (line 39) | private void EnsureThatBlobIsLocked()
method AddInstance (line 47) | public void AddInstance(string instanceId)
method RemoveInstance (line 53) | public void RemoveInstance(string instanceId)
method GetUpdateDomain (line 59) | public string GetUpdateDomain()
method GetInstanceIds (line 65) | public ISet<string> GetInstanceIds()
method TryLock (line 71) | public async Task<bool> TryLock()
method DisposeLease (line 105) | private void DisposeLease()
method FlushBlobMetadata (line 112) | private Task FlushBlobMetadata()
method FlushAndRelease (line 135) | public async Task FlushAndRelease()
method Release (line 142) | public async Task Release()
method Dispose (line 148) | public void Dispose()
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlobFactory.cs
class UpdateBlobFactory (line 8) | public class UpdateBlobFactory : IUpdateBlobFactory
method UpdateBlobFactory (line 14) | public UpdateBlobFactory(string clusterId, CloudBlobContainer blobCont...
method TryLockUpdateBlob (line 21) | public async Task<IUpdateBlob> TryLockUpdateBlob(string appId)
method GetUpdateBlobName (line 36) | private string GetUpdateBlobName(string applicationId)
method GetBlob (line 41) | private CloudBlockBlob GetBlob(string updateBlobName)
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlobUnavailableException.cs
class UpdateBlobUnavailableException (line 5) | public class UpdateBlobUnavailableException : Exception
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateDomainEntity.cs
class UpdateDomainEntity (line 5) | public class UpdateDomainEntity : TableEntity
method UpdateDomainEntity (line 7) | public UpdateDomainEntity()
method UpdateDomainEntity (line 11) | public UpdateDomainEntity(string partitionKey, string rowKey, string u...
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionStatus.cs
class UpdateSessionStatus (line 5) | public class UpdateSessionStatus
method UpdateSessionStatus (line 11) | public UpdateSessionStatus(IEnumerable<UpdateDomainEntity> instancesEn...
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionTable.cs
class UpdateSessionTable (line 9) | public class UpdateSessionTable : IUpdateSessionTable
method UpdateSessionTable (line 23) | public UpdateSessionTable(string connectionString, TimeSpan ttl)
method FetchUpdateSessionStatus (line 31) | public Task<UpdateSessionStatus> FetchUpdateSessionStatus(string super...
method AddInstanceEntity (line 73) | private static void AddInstanceEntity(Dictionary<string, List<UpdateDo...
method TryExecuteTransaction (line 88) | public async Task<bool> TryExecuteTransaction(UpdateSessionTransaction...
method DeleteInstanceEntity (line 108) | public async Task DeleteInstanceEntity(string superClusterId, string i...
method GetActiveUpdateDomain (line 121) | public async Task<string> GetActiveUpdateDomain(string superClusterId)
method CreatePartitionQuery (line 133) | private static string CreatePartitionQuery(string superClusterId)
FILE: src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionTransaction.cs
class UpdateSessionTransaction (line 5) | public class UpdateSessionTransaction
method UpdateSessionTransaction (line 12) | public UpdateSessionTransaction(string superClusterId, string instance...
method InsertUpdateDomain (line 19) | public UpdateSessionTransaction InsertUpdateDomain()
method InsertOrReplaceInstance (line 27) | public UpdateSessionTransaction InsertOrReplaceInstance()
method MarkInstanceListAsModified (line 35) | public UpdateSessionTransaction MarkInstanceListAsModified()
method FailIfInstanceListModified (line 42) | public UpdateSessionTransaction FailIfInstanceListModified(UpdateSessi...
method ReplaceUpdateDomain (line 48) | public UpdateSessionTransaction ReplaceUpdateDomain(UpdateSessionStatu...
FILE: src/AzureBlobUtils/BlobUtils.cs
class BlobUtils (line 11) | public static class BlobUtils
method DownloadBlobDirectory (line 13) | public static Task DownloadBlobDirectory(CloudBlobDirectory blobDirect...
method DownloadBlobContainer (line 18) | public static Task DownloadBlobContainer(CloudBlobContainer blobContai...
method DownloadBlobs (line 23) | private static async Task DownloadBlobs(dynamic blobDirectory, string ...
method ListBlobsFlat (line 45) | private static Task<IEnumerable<IListBlobItem>> ListBlobsFlat(dynamic ...
method ListBlobsAsync (line 51) | public static Task<IEnumerable<IListBlobItem>> ListBlobsAsync(this Clo...
method GetLocalRelativePath (line 58) | private static string GetLocalRelativePath(ICloudBlob blob, dynamic bl...
method GetBlobRelativePathInternal (line 63) | private static string GetBlobRelativePathInternal(ICloudBlob blob, dyn...
method GetBlobRelativePath (line 68) | public static string GetBlobRelativePath(ICloudBlob blob, CloudBlobDir...
method GetBlobRelativePath (line 73) | public static string GetBlobRelativePath(ICloudBlob blob, CloudBlobCon...
method CreateEmptyBlob (line 78) | public static async Task CreateEmptyBlob(ICloudBlob blob)
method UploadFile (line 85) | public static Task UploadFile(string localPath, CloudBlobContainer blo...
method UploadDirectory (line 91) | public static Task UploadDirectory(string localDirPath, CloudBlobConta...
method GetBlobContainer (line 103) | public static CloudBlobContainer GetBlobContainer(string connectionStr...
method ExistsAsync (line 110) | public static Task<bool> ExistsAsync(this CloudBlobDirectory dir)
method DeleteAsync (line 115) | public static Task DeleteAsync(this CloudBlobDirectory dir)
FILE: src/AzureUtils/Lease/BlobLeaseFactory.cs
class BlobLeaseFactory (line 5) | public class BlobLeaseFactory : IBlobLeaseFactory
method CreateLease (line 7) | public IBlobLease CreateLease(ICloudBlob blob)
FILE: src/AzureUtils/Lease/IBlobLease.cs
type IBlobLease (line 6) | public interface IBlobLease : IDisposable
method TryAcquireLease (line 11) | Task<string> TryAcquireLease();
method ReleaseLease (line 13) | Task ReleaseLease();
FILE: src/AzureUtils/Lease/IBlobLeaseFactory.cs
type IBlobLeaseFactory (line 5) | public interface IBlobLeaseFactory
method CreateLease (line 7) | IBlobLease CreateLease(ICloudBlob blob);
FILE: src/AzureUtils/Lease/SelfRenewableBlobLease.cs
class SelfRenewableBlobLease (line 14) | public class SelfRenewableBlobLease : IBlobLease
method SelfRenewableBlobLease (line 22) | public SelfRenewableBlobLease(ICloudBlob blob)
method TryAcquireLease (line 28) | public async Task<string> TryAcquireLease()
method DisableTimer (line 48) | private Task DisableTimer()
method ReleaseLease (line 60) | public async Task ReleaseLease()
method RenewLease (line 84) | private static async Task RenewLease(ICloudBlob blob, string leaseId)
method GetKey (line 102) | private static string GetKey(ICloudBlob blob)
method Dispose (line 107) | public void Dispose()
FILE: src/AzureUtils/Utils/BlobUtils.cs
class BlobUtils (line 13) | public static class BlobUtils
method DownloadBlobDirectory (line 15) | public static async Task DownloadBlobDirectory(CloudBlobDirectory blob...
method ComputeMd5Hash (line 52) | private static string ComputeMd5Hash(MD5CryptoServiceProvider md5, str...
method ListBlobsFlat (line 60) | private static Task<IEnumerable<IListBlobItem>> ListBlobsFlat(dynamic ...
method ListBlobsAsync (line 66) | public static Task<IEnumerable<IListBlobItem>> ListBlobsAsync(this Clo...
method GetLocalRelativePath (line 72) | private static string GetLocalRelativePath(ICloudBlob blob, dynamic bl...
method GetBlobRelativePathInternal (line 77) | private static string GetBlobRelativePathInternal(ICloudBlob blob, dyn...
method GetBlobRelativePath (line 82) | public static string GetBlobRelativePath(ICloudBlob blob, CloudBlobDir...
method GetBlobRelativePath (line 87) | public static string GetBlobRelativePath(ICloudBlob blob, CloudBlobCon...
method CreateBlobIfNotExists (line 92) | public static async Task CreateBlobIfNotExists(ICloudBlob blob)
method CreateEmptyBlob (line 108) | public static async Task CreateEmptyBlob(ICloudBlob blob)
method UploadFile (line 115) | public static Task UploadFile(string localPath, CloudBlobContainer blo...
method UploadDirectory (line 121) | public static Task UploadDirectory(string localDirPath, CloudBlobConta...
method GetBlobContainer (line 133) | public static CloudBlobContainer GetBlobContainer(string connectionStr...
method ExistsAsync (line 145) | public static async Task<bool> ExistsAsync(this CloudBlobDirectory dir)
method DeleteAsync (line 150) | public static async Task DeleteAsync(this CloudBlobDirectory dir)
FILE: src/Common/FileUtils.cs
class FileUtils (line 8) | public static class FileUtils
method CopyDir (line 10) | public static Task CopyDir(string srcPath, string destPath, bool overw...
method CreateDirectory (line 28) | public static Task CreateDirectory(string path)
method DeleteDirectoryIfAny (line 33) | public static Task DeleteDirectoryIfAny(string destPath, bool recursiv...
method ListFilesRecursively (line 44) | public static IEnumerable<string> ListFilesRecursively(string dirPath)
method GetRelativePath (line 64) | public static string GetRelativePath(string dirPath, string filePath)
method DirectoryDoesntExistOrEmpty (line 74) | public static bool DirectoryDoesntExistOrEmpty(string path)
FILE: src/Common/Json/IJsonSerializer.cs
type IJsonSerializer (line 5) | public interface IJsonSerializer
method Serialize (line 7) | string Serialize(object data);
method SerializeAsync (line 8) | Task SerializeAsync(object data);
method Deserialize (line 9) | T Deserialize<T>(string data);
method DeserializeAsync (line 10) | Task<T> DeserializeAsync<T>(string data);
FILE: src/Common/Json/JsonSerializer.cs
class JsonSerializer (line 7) | public class JsonSerializer : IJsonSerializer
method JsonSerializer (line 11) | public JsonSerializer(ITraceWriter traceWriter)
method DeserializeAsync (line 16) | public Task<T> DeserializeAsync<T>(string data)
method SerializeAsync (line 21) | public Task SerializeAsync(object data)
method Deserialize (line 26) | public T Deserialize<T>(string data)
method Serialize (line 34) | public string Serialize(object data)
FILE: src/Common/Utils/DictionaryUtils.cs
class DictionaryUtils (line 6) | public static class DictionaryUtils
method ToDictionary (line 8) | public static Dictionary<TKey, TValue> ToDictionary<TKey, TValue>(IRea...
FILE: src/Common/Utils/FileUtils.cs
class FileUtils (line 8) | public static class FileUtils
method CopyDir (line 10) | public static Task CopyDir(string srcPath, string destPath, bool overw...
method CreateDirectory (line 28) | public static Task CreateDirectory(string path)
method DeleteDirectoryIfAny (line 33) | public static Task DeleteDirectoryIfAny(string destPath, bool recursiv...
method ListFilesRecursively (line 44) | public static IEnumerable<string> ListFilesRecursively(string dirPath)
method GetRelativePath (line 64) | public static string GetRelativePath(string dirPath, string filePath)
method DirectoryDoesntExistOrEmpty (line 74) | public static bool DirectoryDoesntExistOrEmpty(string path)
FILE: src/Common/Utils/HashCodeUtils.cs
class HashCodeUtils (line 5) | public static class HashCodeUtils
method GetHashCode (line 7) | public static int GetHashCode(IEnumerable enumerable)
FILE: src/Common/Utils/TaskExtensions.cs
class TaskExtensions (line 7) | public static class TaskExtensions
method Timeout (line 9) | public static async Task Timeout(this Task task, TimeSpan timeout, str...
method Timeout (line 25) | public static async Task<TResult> Timeout<TResult>(this Task<TResult> ...
FILE: src/Common/Utils/TraceUtils.cs
class TraceUtils (line 6) | public static class TraceUtils
method TraceAllErrors (line 8) | public static void TraceAllErrors(string msg, AggregateException aggre...
FILE: src/Etg.Yams.Client/IProcessArgsParser.cs
type IProcessArgsParser (line 3) | public interface IProcessArgsParser
method ParseArgs (line 5) | YamsClientOptions ParseArgs(string[] args);
FILE: src/Etg.Yams.Client/IYamsClient.cs
type IYamsClient (line 6) | public interface IYamsClient : IDisposable
method Connect (line 8) | Task Connect();
method SendHeartBeat (line 9) | Task SendHeartBeat();
method SendInitializationDoneMessage (line 10) | Task SendInitializationDoneMessage();
FILE: src/Etg.Yams.Client/IYamsClientFactory.cs
type IYamsClientFactory (line 3) | public interface IYamsClientFactory
method CreateYamsClient (line 5) | IYamsClient CreateYamsClient(YamsClientConfig config);
FILE: src/Etg.Yams.Client/ProcessArgsParser.cs
class ProcessArgsParser (line 5) | public class ProcessArgsParser : IProcessArgsParser
method ParseArgs (line 7) | public YamsClientOptions ParseArgs(string[] args)
FILE: src/Etg.Yams.Client/YamsClient.cs
class YamsClient (line 9) | public class YamsClient : IYamsClient
method YamsClient (line 20) | public YamsClient(YamsClientOptions options, YamsClientConfig config, ...
method Connect (line 30) | public async Task Connect()
method SendInitializationDoneMessage (line 51) | public async Task SendInitializationDoneMessage()
method SendHeartBeat (line 65) | public async Task SendHeartBeat()
method Dispose (line 79) | public void Dispose()
method WaitForExit (line 86) | private async Task WaitForExit()
method FormatMessage (line 106) | private string FormatMessage(string message)
FILE: src/Etg.Yams.Client/YamsClientConfig.cs
class YamsClientConfig (line 5) | public class YamsClientConfig
method YamsClientConfig (line 7) | public YamsClientConfig(TimeSpan connectTimeout, TimeSpan initDoneMess...
FILE: src/Etg.Yams.Client/YamsClientConfigBuilder.cs
class YamsClientConfigBuilder (line 5) | public class YamsClientConfigBuilder
method YamsClientConfigBuilder (line 12) | public YamsClientConfigBuilder(string[] processArgs)
method SetConnectTimeout (line 17) | public YamsClientConfigBuilder SetConnectTimeout(TimeSpan timeout)
method SetInitDoneMessageTimeout (line 23) | public YamsClientConfigBuilder SetInitDoneMessageTimeout(TimeSpan time...
method SetHeartBeatMessageTimeout (line 29) | public YamsClientConfigBuilder SetHeartBeatMessageTimeout(TimeSpan tim...
method Build (line 35) | public YamsClientConfig Build()
FILE: src/Etg.Yams.Client/YamsClientFactory.cs
class YamsClientFactory (line 7) | public class YamsClientFactory : IYamsClientFactory
method YamsClientFactory (line 11) | public YamsClientFactory() : this(new ProcessArgsParser())
method YamsClientFactory (line 15) | public YamsClientFactory(IProcessArgsParser processArgsParser)
method CreateYamsClient (line 20) | public IYamsClient CreateYamsClient(YamsClientConfig config)
FILE: src/Etg.Yams.Client/YamsClientOptions.cs
class YamsClientOptions (line 5) | public class YamsClientOptions
FILE: src/Etg.Yams.Core/Application/AppIdentity.cs
class AppIdentity (line 7) | public class AppIdentity : IEquatable<AppIdentity>
method AppIdentity (line 17) | public AppIdentity(string id, SemVersion version)
method AppIdentity (line 23) | [JsonConstructor]
method ToString (line 30) | public override string ToString()
method Equals (line 45) | public bool Equals(AppIdentity other)
method Equals (line 52) | public override bool Equals(object obj)
method GetHashCode (line 60) | public override int GetHashCode()
FILE: src/Etg.Yams.Core/Application/Application.cs
class Application (line 8) | public abstract class Application : IApplication
method Application (line 10) | protected Application(AppIdentity identity, string path)
method StartProcess (line 16) | protected async Task<bool> StartProcess(IProcess process, string args)
method OnProcessExited (line 31) | protected void OnProcessExited(object sender, ProcessExitedArgs e)
method Start (line 45) | public abstract Task<bool> Start();
method Stop (line 46) | public abstract Task Stop();
method Dispose (line 49) | public abstract void Dispose();
FILE: src/Etg.Yams.Core/Application/ApplicationConfig.cs
class ApplicationConfig (line 3) | public class ApplicationConfig
method ApplicationConfig (line 12) | public ApplicationConfig(
FILE: src/Etg.Yams.Core/Application/ApplicationConfigParser.cs
class ApplicationConfigParser (line 10) | public class ApplicationConfigParser : IApplicationConfigParser
class ApplicationConfigData (line 16) | private class ApplicationConfigData
method ApplicationConfigParser (line 27) | public ApplicationConfigParser(IApplicationConfigSymbolResolver symbol...
method ParseFile (line 33) | public async Task<ApplicationConfig> ParseFile(string path, AppInstall...
method Parse (line 42) | private async Task<ApplicationConfig> Parse(ApplicationConfigData appC...
method SubstituteSymbols (line 49) | private async Task<string> SubstituteSymbols(string str, AppInstallCon...
method SubstitueSymbol (line 65) | private async Task<string> SubstitueSymbol(string str, string symbol, ...
FILE: src/Etg.Yams.Core/Application/ApplicationConfigSymbolResolver.cs
class ApplicationConfigSymbolResolver (line 8) | public class ApplicationConfigSymbolResolver : IApplicationConfigSymbolR...
method ApplicationConfigSymbolResolver (line 14) | public ApplicationConfigSymbolResolver(string clusterId, string instan...
method ApplicationConfigSymbolResolver (line 18) | public ApplicationConfigSymbolResolver(string clusterId, string instan...
method ResolveSymbol (line 25) | public Task<string> ResolveSymbol(AppInstallConfig appInstallConfig, s...
FILE: src/Etg.Yams.Core/Application/ApplicationPool.cs
class ApplicationPool (line 9) | public class ApplicationPool : IApplicationPool
method ApplicationPool (line 13) | public ApplicationPool()
method AddApplication (line 18) | public async Task AddApplication(IApplication application)
method HasApplication (line 39) | public bool HasApplication(AppIdentity appIdentity)
method GetApplication (line 44) | public IApplication GetApplication(AppIdentity appIdentity)
method RemoveApplication (line 55) | public async Task RemoveApplication(AppIdentity appIdentity)
method StartApplication (line 76) | private static async Task<bool> StartApplication(IApplication applicat...
method OnApplicationExited (line 87) | private void OnApplicationExited(object sender, ApplicationExitedArgs ...
method Shutdown (line 97) | public async Task Shutdown()
method Dispose (line 106) | public void Dispose()
FILE: src/Etg.Yams.Core/Application/ConfigurableApplication.cs
class ConfigurableApplication (line 6) | public class ConfigurableApplication : Application
method ConfigurableApplication (line 20) | public ConfigurableApplication(string path, ApplicationConfig appConfi...
method Start (line 28) | public override Task<bool> Start()
method Stop (line 35) | public override Task Stop()
method Dispose (line 40) | public override void Dispose()
FILE: src/Etg.Yams.Core/Application/ConfigurableApplicationFactory.cs
class ConfigurableApplicationFactory (line 9) | public class ConfigurableApplicationFactory : IApplicationFactory
method ConfigurableApplicationFactory (line 15) | public ConfigurableApplicationFactory(IApplicationConfigParser appConf...
method CreateApplication (line 22) | public async Task<IApplication> CreateApplication(AppInstallConfig app...
FILE: src/Etg.Yams.Core/Application/IApplication.cs
type IApplication (line 10) | public interface IApplication : IDisposable
method Start (line 19) | Task<bool> Start();
method Stop (line 21) | Task Stop();
class ApplicationExitedArgs (line 30) | public class ApplicationExitedArgs : EventArgs
FILE: src/Etg.Yams.Core/Application/IApplicationConfigParser.cs
type IApplicationConfigParser (line 7) | public interface IApplicationConfigParser
method ParseFile (line 15) | Task<ApplicationConfig> ParseFile(string path, AppInstallConfig appIns...
FILE: src/Etg.Yams.Core/Application/IApplicationConfigSymbolResolver.cs
type IApplicationConfigSymbolResolver (line 7) | public interface IApplicationConfigSymbolResolver
method ResolveSymbol (line 16) | Task<string> ResolveSymbol(AppInstallConfig appInstallConfig, string s...
FILE: src/Etg.Yams.Core/Application/IApplicationFactory.cs
type IApplicationFactory (line 7) | public interface IApplicationFactory
method CreateApplication (line 9) | Task<IApplication> CreateApplication(AppInstallConfig appInstallConfig...
FILE: src/Etg.Yams.Core/Application/IApplicationPool.cs
type IApplicationPool (line 7) | public interface IApplicationPool : IDisposable
method AddApplication (line 14) | Task AddApplication(IApplication application);
method RemoveApplication (line 21) | Task RemoveApplication(AppIdentity appIdentity);
method HasApplication (line 23) | bool HasApplication(AppIdentity appIdentity);
method GetApplication (line 30) | IApplication GetApplication(AppIdentity appIdentity);
method Shutdown (line 41) | Task Shutdown();
FILE: src/Etg.Yams.Core/Constants.cs
class Constants (line 3) | public static class Constants
FILE: src/Etg.Yams.Core/Deploy/AndDeploymentMatcher.cs
class AndDeploymentMatcher (line 6) | public class AndDeploymentMatcher : IAppDeploymentMatcher
method AndDeploymentMatcher (line 10) | public AndDeploymentMatcher(params IAppDeploymentMatcher[] matchers)
method IsMatch (line 15) | public bool IsMatch(AppDeploymentConfig appDeploymentConfig)
FILE: src/Etg.Yams.Core/Deploy/ClusterIdDeploymentMatcher.cs
class ClusterIdDeploymentMatcher (line 6) | public class ClusterIdDeploymentMatcher : IAppDeploymentMatcher
method ClusterIdDeploymentMatcher (line 10) | public ClusterIdDeploymentMatcher(string clusterId)
method IsMatch (line 15) | public bool IsMatch(AppDeploymentConfig appDeploymentConfig)
FILE: src/Etg.Yams.Core/Deploy/IAppDeploymentMatcher.cs
type IAppDeploymentMatcher (line 5) | public interface IAppDeploymentMatcher
method IsMatch (line 13) | bool IsMatch(AppDeploymentConfig appDeploymentConfig);
FILE: src/Etg.Yams.Core/Deploy/IApplicationDeploymentDirectory.cs
type IApplicationDeploymentDirectory (line 7) | public interface IApplicationDeploymentDirectory
method FetchDeployments (line 10) | Task<IEnumerable<AppDeploymentConfig>> FetchDeployments();
FILE: src/Etg.Yams.Core/Deploy/PropertiesDeploymentMatcher.cs
class PropertiesDeploymentMatcher (line 7) | public class PropertiesDeploymentMatcher : IAppDeploymentMatcher
method PropertiesDeploymentMatcher (line 10) | public PropertiesDeploymentMatcher(IReadOnlyDictionary<string, string>...
method IsMatch (line 15) | public bool IsMatch(AppDeploymentConfig appDeploymentConfig)
FILE: src/Etg.Yams.Core/Deploy/RemoteApplicationDeploymentDirectory.cs
class RemoteApplicationDeploymentDirectory (line 16) | public class RemoteApplicationDeploymentDirectory : IApplicationDeployme...
method RemoteApplicationDeploymentDirectory (line 21) | public RemoteApplicationDeploymentDirectory(IDeploymentRepository depl...
method FetchDeployments (line 27) | public async Task<IEnumerable<AppDeploymentConfig>> FetchDeployments()
FILE: src/Etg.Yams.Core/Download/ApplicationDownloader.cs
class ApplicationDownloader (line 10) | public class ApplicationDownloader : IApplicationDownloader
method ApplicationDownloader (line 20) | public ApplicationDownloader(string applicationRootPath, IDeploymentRe...
method DownloadApplication (line 26) | public async Task DownloadApplication(AppIdentity appIdentity)
FILE: src/Etg.Yams.Core/Download/IApplicationDownloader.cs
type IApplicationDownloader (line 6) | public interface IApplicationDownloader
method DownloadApplication (line 13) | Task DownloadApplication(AppIdentity appIdentity);
FILE: src/Etg.Yams.Core/IYamsService.cs
type IYamsService (line 5) | public interface IYamsService
method Start (line 7) | Task Start();
method Stop (line 8) | Task Stop();
FILE: src/Etg.Yams.Core/Install/AppInstallConfig.cs
class AppInstallConfig (line 9) | public class AppInstallConfig
method AppInstallConfig (line 11) | public AppInstallConfig(AppIdentity appIdentity, IReadOnlyDictionary<s...
method AppInstallConfig (line 16) | public AppInstallConfig(AppIdentity appIdentity)
method Equals (line 22) | protected bool Equals(AppDeploymentConfig other)
method Equals (line 29) | public override bool Equals(object obj)
method GetHashCode (line 37) | public override int GetHashCode()
FILE: src/Etg.Yams.Core/Install/ApplicationInstaller.cs
class ApplicationInstaller (line 13) | public class ApplicationInstaller : IApplicationInstaller
method ApplicationInstaller (line 19) | public ApplicationInstaller(string applicationsRootPath,
method Install (line 27) | public async Task Install(AppInstallConfig appInstallConfig)
method UnInstall (line 46) | public async Task UnInstall(AppIdentity appIdentity)
method Update (line 61) | public async Task<bool> Update(IEnumerable<AppIdentity> applicationsTo...
method DeleteAppBinaries (line 90) | private async Task DeleteAppBinaries(AppIdentity appIdentity)
method UnInstallApplications (line 95) | private async Task UnInstallApplications(IEnumerable<AppIdentity> appl...
method InstallApplications (line 105) | private async Task InstallApplications(IEnumerable<AppInstallConfig> a...
method GetApplicationAbsolutePath (line 115) | private string GetApplicationAbsolutePath(AppIdentity appIdentity)
FILE: src/Etg.Yams.Core/Install/IApplicationInstaller.cs
type IApplicationInstaller (line 12) | public interface IApplicationInstaller
method Install (line 19) | Task Install(AppInstallConfig appInstallConfig);
method UnInstall (line 26) | Task UnInstall(AppIdentity appIdentity);
method Update (line 36) | Task<bool> Update(IEnumerable<AppIdentity> applicationsToRemove, IEnum...
FILE: src/Etg.Yams.Core/Os/ISystem.cs
type ISystem (line 8) | public interface ISystem
method GetEnvironmentVariable (line 10) | string GetEnvironmentVariable(string name, EnvironmentVariableTarget t...
FILE: src/Etg.Yams.Core/Os/System.cs
class System (line 5) | public class System : ISystem
method GetEnvironmentVariable (line 7) | public string GetEnvironmentVariable(string name, EnvironmentVariableT...
FILE: src/Etg.Yams.Core/Os/SystemExtensions.cs
class SystemExtensions (line 7) | public static class SystemExtensions
method GetPathEnvironmentVariable (line 9) | public static string GetPathEnvironmentVariable(this ISystem system)
method SplitPath (line 20) | private static IEnumerable<string> SplitPath(string path)
method MergePath (line 25) | private static string MergePath(string processPath, string machinePath)
FILE: src/Etg.Yams.Core/Process/AbstractProcessDecorator.cs
class AbstractProcessDecorator (line 7) | public class AbstractProcessDecorator : IProcess
method AbstractProcessDecorator (line 13) | public AbstractProcessDecorator(AppIdentity identity, IProcess process)
method Dispose (line 25) | public virtual void Dispose()
method Start (line 30) | public virtual Task Start(string args)
method Close (line 35) | public virtual Task Close()
method Kill (line 41) | public virtual Task Kill()
method ReleaseResources (line 47) | public virtual Task ReleaseResources()
method InvokeExited (line 53) | protected void InvokeExited(object sender, ProcessExitedArgs args)
method UnsubscribeFromExited (line 58) | protected void UnsubscribeFromExited()
FILE: src/Etg.Yams.Core/Process/GracefullShutdownProcessDecorator.cs
class GracefulShutdownProcessDecorator (line 10) | public class GracefulShutdownProcessDecorator : AbstractProcessDecorator
method GracefulShutdownProcessDecorator (line 15) | public GracefulShutdownProcessDecorator(AppIdentity identity, YamsConf...
method Dispose (line 22) | public override void Dispose()
method Start (line 28) | public override async Task Start(string args)
method Close (line 36) | public override async Task Close()
FILE: src/Etg.Yams.Core/Process/HealthProcessDecorator.cs
class HealthProcessDecorator (line 10) | public class HealthProcessDecorator : AbstractProcessDecorator
method HealthProcessDecorator (line 17) | public HealthProcessDecorator(AppIdentity identity, YamsConfig config,...
method Start (line 24) | public override async Task Start(string args)
method Close (line 34) | public override async Task Close()
method Kill (line 40) | public override async Task Kill()
method MonitorProcessHealth (line 46) | private void MonitorProcessHealth()
method WaitForHeartBeat (line 62) | private async Task WaitForHeartBeat(CancellationToken cancellationToke...
method StopMonitoringProcessHealth (line 92) | private async Task StopMonitoringProcessHealth()
FILE: src/Etg.Yams.Core/Process/IProcess.cs
type IProcess (line 6) | public interface IProcess : IDisposable
method Start (line 8) | Task Start(string args);
method Close (line 10) | Task Close();
method Kill (line 12) | Task Kill();
method ReleaseResources (line 14) | Task ReleaseResources();
class ProcessExitedArgs (line 25) | public class ProcessExitedArgs : EventArgs
method ProcessExitedArgs (line 27) | public ProcessExitedArgs(string message)
FILE: src/Etg.Yams.Core/Process/IProcessFactory.cs
type IProcessFactory (line 5) | public interface IProcessFactory
method CreateProcess (line 7) | IProcess CreateProcess(AppIdentity identity, string exePath, bool moni...
FILE: src/Etg.Yams.Core/Process/IProcessStopper.cs
type IProcessStopper (line 5) | public interface IProcessStopper
method StopProcess (line 7) | Task StopProcess(IProcess process);
FILE: src/Etg.Yams.Core/Process/MonitorInitProcessDecorator.cs
class MonitorInitProcessDecorator (line 10) | public class MonitorInitProcessDecorator : AbstractProcessDecorator
method MonitorInitProcessDecorator (line 15) | public MonitorInitProcessDecorator(AppIdentity identity, YamsConfig co...
method Dispose (line 22) | public override void Dispose()
method Start (line 28) | public override async Task Start(string args)
method Kill (line 55) | public override async Task Kill()
FILE: src/Etg.Yams.Core/Process/Process.cs
class Process (line 13) | public class Process : IProcess
method Process (line 36) | public Process(AppIdentity identity, string exePath, bool useShellExec...
method Start (line 44) | public async Task Start(string args)
method Close (line 85) | public async Task Close()
method Kill (line 97) | public Task Kill()
method ProcessExited (line 112) | protected void ProcessExited(object sender, EventArgs e)
method ReleaseResources (line 125) | public async Task ReleaseResources()
method Dispose (line 146) | public void Dispose()
FILE: src/Etg.Yams.Core/Process/ProcessFactory.cs
class ProcessFactory (line 8) | public class ProcessFactory : IProcessFactory
method ProcessFactory (line 13) | public ProcessFactory(YamsConfig config, ISystem system)
method CreateProcess (line 19) | public IProcess CreateProcess(AppIdentity identity, string exePath, bo...
FILE: src/Etg.Yams.Core/Process/ProcessStopper.cs
class ProcessStopper (line 8) | public class ProcessStopper : IProcessStopper
method ProcessStopper (line 14) | public ProcessStopper(int waitForExitInSeconds)
method StopProcess (line 19) | public async Task StopProcess(IProcess process)
method Close (line 45) | private async Task<bool> Close(IProcess process)
FILE: src/Etg.Yams.Core/Process/SelfRestartingProcess.cs
class SelfRestartingProcess (line 11) | public class SelfRestartingProcess : IProcess
method SelfRestartingProcess (line 25) | public SelfRestartingProcess(IProcess process, int maximumRestartAttem...
method Start (line 31) | public Task Start(string args)
method Close (line 38) | public Task Close()
method Kill (line 44) | public Task Kill()
method ReleaseResources (line 50) | public Task ReleaseResources()
method ExitedTryRestart (line 65) | protected async void ExitedTryRestart(object sender, ProcessExitedArgs...
method OnFailed (line 90) | protected void OnFailed(string format, params object[] args)
method Dispose (line 103) | public void Dispose()
FILE: src/Etg.Yams.Core/Storage/BinariesNotFoundException.cs
class BinariesNotFoundException (line 5) | public class BinariesNotFoundException : Exception
method BinariesNotFoundException (line 7) | public BinariesNotFoundException()
method BinariesNotFoundException (line 11) | public BinariesNotFoundException(string msg) : base(msg)
method BinariesNotFoundException (line 15) | public BinariesNotFoundException(string msg, Exception ex) : base(msg,...
FILE: src/Etg.Yams.Core/Storage/Config/AppDeploymentConfig.cs
class AppDeploymentConfig (line 9) | public class AppDeploymentConfig : AppInstallConfig
method AppDeploymentConfig (line 11) | public AppDeploymentConfig(AppIdentity appIdentity) : base(appIdentity)
method AppDeploymentConfig (line 16) | public AppDeploymentConfig(AppIdentity appIdentity, IEnumerable<string...
method AppDeploymentConfig (line 22) | public AppDeploymentConfig(AppIdentity appIdentity, IEnumerable<string...
method AddClusterId (line 27) | public AppDeploymentConfig AddClusterId(string clusterId)
method RemoveClusterId (line 37) | public AppDeploymentConfig RemoveClusterId(string clusterId)
method AddProperty (line 47) | public AppDeploymentConfig AddProperty(string key, string value)
method RemoveProperty (line 58) | public AppDeploymentConfig RemoveProperty(string key)
method Equals (line 69) | protected new bool Equals(AppDeploymentConfig other)
method Equals (line 74) | public override bool Equals(object obj)
method GetHashCode (line 82) | public override int GetHashCode()
FILE: src/Etg.Yams.Core/Storage/Config/DeploymentConfig.cs
class DeploymentConfig (line 10) | public class DeploymentConfig : IEnumerable<AppDeploymentConfig>
method DeploymentConfig (line 14) | public DeploymentConfig()
method DeploymentConfig (line 18) | public DeploymentConfig(IEnumerable<AppDeploymentConfig> apps)
method DeploymentConfig (line 23) | private DeploymentConfig(Dictionary<AppIdentity, AppDeploymentConfig> ...
method Equals (line 28) | protected bool Equals(DeploymentConfig other)
method Equals (line 33) | public override bool Equals(object obj)
method GetHashCode (line 41) | public override int GetHashCode()
method ListApplications (line 46) | public IEnumerable<string> ListApplications()
method ListApplications (line 53) | public IEnumerable<string> ListApplications(string clusterId)
method ListVersions (line 61) | public IEnumerable<string> ListVersions(string appId)
method ListVersions (line 70) | public IEnumerable<string> ListVersions(string appId, string clusterId)
method ListClusters (line 79) | public IEnumerable<string> ListClusters()
method ListClusters (line 86) | public IEnumerable<string> ListClusters(string appId)
method ListClusters (line 93) | public IEnumerable<string> ListClusters(AppIdentity appIdentity)
method AddApplication (line 103) | public DeploymentConfig AddApplication(AppIdentity appIdentity, string...
method AddApplication (line 120) | public DeploymentConfig AddApplication(string appId, string version, s...
method SetApplicationConfig (line 125) | public DeploymentConfig SetApplicationConfig(AppDeploymentConfig appDe...
method CopyApps (line 132) | private Dictionary<AppIdentity, AppDeploymentConfig> CopyApps()
method GetApplicationConfig (line 138) | public AppDeploymentConfig GetApplicationConfig(AppIdentity appIdentity)
method HasApplication (line 148) | public bool HasApplication(string appId)
method HasApplication (line 153) | public bool HasApplication(AppIdentity appIdentity)
method HasApplication (line 158) | public bool HasApplication(AppIdentity appIdentity, string clusterId)
method RemoveApplication (line 168) | public DeploymentConfig RemoveApplication(string appId)
method RemoveApplication (line 182) | public DeploymentConfig RemoveApplication(string appId, string clusterId)
method RemoveApplication (line 208) | public DeploymentConfig RemoveApplication(AppIdentity appIdentity)
method RemoveApplication (line 219) | public DeploymentConfig RemoveApplication(AppIdentity appIdentity, str...
method GetEnumerator (line 237) | public IEnumerator<AppDeploymentConfig> GetEnumerator()
method GetEnumerator (line 242) | IEnumerator IEnumerable.GetEnumerator()
FILE: src/Etg.Yams.Core/Storage/Config/IDeploymentConfigSerializer.cs
type IDeploymentConfigSerializer (line 3) | public interface IDeploymentConfigSerializer
method Deserialize (line 5) | DeploymentConfig Deserialize(string data);
method Serialize (line 6) | string Serialize(DeploymentConfig deploymentConfig);
FILE: src/Etg.Yams.Core/Storage/Config/JsonDeploymentConfigSerializer.cs
class JsonDeploymentConfigSerializer (line 8) | public class JsonDeploymentConfigSerializer : IDeploymentConfigSerializer
method JsonDeploymentConfigSerializer (line 12) | public JsonDeploymentConfigSerializer(IJsonSerializer jsonSerializer)
method Deserialize (line 17) | public DeploymentConfig Deserialize(string data)
method Serialize (line 38) | public string Serialize(DeploymentConfig deploymentConfig)
class ApplicationData (line 51) | private class ApplicationData
method ApplicationData (line 53) | public ApplicationData(string id, string version, string[] targetClu...
class ApplicationsData (line 75) | private class ApplicationsData
method ApplicationsData (line 77) | public ApplicationsData(ApplicationData[] applications)
FILE: src/Etg.Yams.Core/Storage/ConflictResolutionMode.cs
type ConflictResolutionMode (line 3) | public enum ConflictResolutionMode
FILE: src/Etg.Yams.Core/Storage/DuplicateBinariesException.cs
class DuplicateBinariesException (line 5) | public class DuplicateBinariesException : Exception
method DuplicateBinariesException (line 7) | public DuplicateBinariesException()
method DuplicateBinariesException (line 11) | public DuplicateBinariesException(string msg) : base(msg)
method DuplicateBinariesException (line 15) | public DuplicateBinariesException(string msg, Exception ex) : base(msg...
FILE: src/Etg.Yams.Core/Storage/IDeploymentRepository.cs
type IDeploymentRepository (line 7) | public interface IDeploymentRepository
method FetchDeploymentConfig (line 9) | Task<DeploymentConfig> FetchDeploymentConfig();
method PublishDeploymentConfig (line 10) | Task PublishDeploymentConfig(DeploymentConfig deploymentConfig);
method UploadApplicationBinaries (line 11) | Task UploadApplicationBinaries(AppIdentity appIdentity, string localPa...
method DeleteApplicationBinaries (line 12) | Task DeleteApplicationBinaries(AppIdentity appIdentity);
method HasApplicationBinaries (line 13) | Task<bool> HasApplicationBinaries(AppIdentity appIdentity);
method DownloadApplicationBinaries (line 14) | Task DownloadApplicationBinaries(AppIdentity appIdentity, string local...
FILE: src/Etg.Yams.Core/Storage/IDeploymentStatusReader.cs
type IDeploymentStatusReader (line 6) | public interface IDeploymentStatusReader
method FetchInstanceDeploymentStatus (line 8) | Task<InstanceDeploymentStatus> FetchInstanceDeploymentStatus(string cl...
FILE: src/Etg.Yams.Core/Storage/IDeploymentStatusWriter.cs
type IDeploymentStatusWriter (line 6) | public interface IDeploymentStatusWriter
method PublishInstanceDeploymentStatus (line 8) | Task PublishInstanceDeploymentStatus(string clusterId, string instanceId,
FILE: src/Etg.Yams.Core/Storage/Status/AppDeploymentStatus.cs
class AppDeploymentStatus (line 8) | public class AppDeploymentStatus
method AppDeploymentStatus (line 10) | public AppDeploymentStatus(AppIdentity appIdentity, string clusterId, ...
method AppDeploymentStatus (line 19) | [JsonConstructor]
method Clone (line 34) | private AppDeploymentStatus Clone()
method WithVersion (line 39) | private AppDeploymentStatus WithVersion(SemVersion version)
FILE: src/Etg.Yams.Core/Storage/Status/ClusterDeploymentStatus.cs
class ClusterDeploymentStatus (line 8) | public class ClusterDeploymentStatus : IEnumerable<AppDeploymentStatus>
method GetAppDeploymentStatus (line 12) | public AppDeploymentStatus GetAppDeploymentStatus(string instanceId, A...
method SetAppDeploymentStatus (line 22) | public void SetAppDeploymentStatus(AppDeploymentStatus appDeploymentSt...
method SetInstanceDeploymentStatus (line 33) | public void SetInstanceDeploymentStatus(string instanceId, InstanceDep...
method ListAll (line 38) | public IEnumerable<AppDeploymentStatus> ListAll()
method GetEnumerator (line 43) | public IEnumerator<AppDeploymentStatus> GetEnumerator()
method GetEnumerator (line 48) | IEnumerator IEnumerable.GetEnumerator()
FILE: src/Etg.Yams.Core/Storage/Status/DeploymentStatus.cs
class DeploymentStatus (line 8) | public class DeploymentStatus : IEnumerable<AppDeploymentStatus>
method DeploymentStatus (line 14) | public DeploymentStatus()
method DeploymentStatus (line 17) | public DeploymentStatus(IEnumerable<AppDeploymentStatus> apps)
method SetClusterDeploymentStatus (line 25) | public void SetClusterDeploymentStatus(string clusterId, ClusterDeploy...
method GetAppDeploymentStatus (line 30) | public AppDeploymentStatus GetAppDeploymentStatus(string clusterId, st...
method SetAppDeploymentStatus (line 40) | public void SetAppDeploymentStatus(AppDeploymentStatus appDeploymentSt...
method GetClusterDeploymentStatus (line 51) | public ClusterDeploymentStatus GetClusterDeploymentStatus(string clust...
method ListAll (line 61) | public IEnumerable<AppDeploymentStatus> ListAll()
method GetEnumerator (line 66) | public IEnumerator<AppDeploymentStatus> GetEnumerator()
method GetEnumerator (line 71) | IEnumerator IEnumerable.GetEnumerator()
FILE: src/Etg.Yams.Core/Storage/Status/IDeploymentStatusSerializer.cs
type IDeploymentStatusSerializer (line 3) | public interface IDeploymentStatusSerializer
method Deserialize (line 5) | InstanceDeploymentStatus Deserialize(string data);
method Serialize (line 6) | string Serialize(InstanceDeploymentStatus instanceDeploymentStatus);
FILE: src/Etg.Yams.Core/Storage/Status/InstanceDeploymentStatus.cs
class InstanceDeploymentStatus (line 7) | public class InstanceDeploymentStatus
method InstanceDeploymentStatus (line 11) | public InstanceDeploymentStatus()
method InstanceDeploymentStatus (line 15) | [JsonConstructor]
method GetAppDeploymentStatus (line 30) | public AppDeploymentStatus GetAppDeploymentStatus(AppIdentity appIdent...
method SetAppDeploymentStatus (line 40) | public void SetAppDeploymentStatus(AppDeploymentStatus appDeploymentSt...
FILE: src/Etg.Yams.Core/Storage/Status/JsonDeploymentStatusSerializer.cs
class JsonDeploymentStatusSerializer (line 6) | public class JsonDeploymentStatusSerializer : IDeploymentStatusSerializer
method JsonDeploymentStatusSerializer (line 10) | public JsonDeploymentStatusSerializer(IJsonSerializer jsonSerializer)
method Deserialize (line 15) | public InstanceDeploymentStatus Deserialize(string data)
method Serialize (line 24) | public string Serialize(InstanceDeploymentStatus instanceDeploymentSta...
FILE: src/Etg.Yams.Core/Update/ApplicationUpdateManager.cs
class ApplicationUpdateManager (line 17) | public class ApplicationUpdateManager : IApplicationUpdateManager
method ApplicationUpdateManager (line 28) | public ApplicationUpdateManager(
method CheckForUpdates (line 48) | public async Task CheckForUpdates()
method UpdateDeploymentStatus (line 121) | private async Task UpdateDeploymentStatus()
method DownloadApplications (line 141) | private async Task DownloadApplications(IEnumerable<AppDeploymentConfi...
method FindApplicationsToRemove (line 153) | private IEnumerable<AppIdentity> FindApplicationsToRemove(IEnumerable<...
method FindApplicationsToDeploy (line 159) | private IEnumerable<AppDeploymentConfig> FindApplicationsToDeploy(IEnu...
FILE: src/Etg.Yams.Core/Update/IApplicationUpdateManager.cs
type IApplicationUpdateManager (line 9) | public interface IApplicationUpdateManager
method CheckForUpdates (line 11) | Task CheckForUpdates();
FILE: src/Etg.Yams.Core/Update/IUpdateSessionManager.cs
type IUpdateSessionManager (line 9) | public interface IUpdateSessionManager
method TryStartUpdateSession (line 16) | Task<bool> TryStartUpdateSession();
method EndUpdateSession (line 21) | Task EndUpdateSession();
FILE: src/Etg.Yams.Core/Utils/ApplicationUtils.cs
class ApplicationUtils (line 6) | public static class ApplicationUtils
method GetApplicationRelativePath (line 8) | public static string GetApplicationRelativePath(AppIdentity appIdentity)
FILE: src/Etg.Yams.Core/Utils/EnvironmentUtils.cs
class EnvironmentUtils (line 7) | public static class EnvironmentUtils
method GetPath (line 9) | public static string GetPath(EnvironmentVariableTarget target)
method SplitPath (line 14) | public static IEnumerable<string> SplitPath(string path)
method MergePath (line 19) | public static string MergePath(string processPath, string machinePath)
FILE: src/Etg.Yams.Core/Utils/ProcessUtils.cs
class ProcessUtils (line 7) | public static class ProcessUtils
method SpinWaitForExit (line 9) | public static async Task<bool> SpinWaitForExit(IProcess process, int m...
FILE: src/Etg.Yams.Core/Watcher/DeploymentWatcher.cs
class DeploymentWatcher (line 8) | public class DeploymentWatcher : IDeploymentWatcher, IDisposable
method DeploymentWatcher (line 14) | public DeploymentWatcher(IApplicationUpdateManager deploymentUpdateMan...
method Start (line 22) | public Task Start()
method Stop (line 28) | public Task Stop()
method OnTimer (line 34) | private async void OnTimer(object sender, ElapsedEventArgs args)
method CheckForUpdates (line 49) | public Task CheckForUpdates()
method Dispose (line 54) | public void Dispose()
FILE: src/Etg.Yams.Core/Watcher/IDeploymentWatcher.cs
type IDeploymentWatcher (line 8) | public interface IDeploymentWatcher
method Start (line 10) | Task Start();
method Stop (line 12) | Task Stop();
FILE: src/Etg.Yams.Core/YamsConfig.cs
class YamsConfig (line 9) | public class YamsConfig
method YamsConfig (line 11) | public YamsConfig(
FILE: src/Etg.Yams.Core/YamsConfigBuilder.cs
class YamsConfigBuilder (line 6) | public class YamsConfigBuilder
method YamsConfigBuilder (line 8) | public YamsConfigBuilder(string clusterId, string instanceUpdateDomain,
method SetSuperClusterId (line 28) | public YamsConfigBuilder SetSuperClusterId(string superClusterId)
method SetCheckForUpdatesPeriodInSeconds (line 39) | public YamsConfigBuilder SetCheckForUpdatesPeriodInSeconds(int value)
method SetApplicationRestartCount (line 45) | public YamsConfigBuilder SetApplicationRestartCount(int value)
method SetProcessWaitForExitInSeconds (line 51) | public YamsConfigBuilder SetProcessWaitForExitInSeconds(int value)
method SetShowApplicationProcessWindow (line 57) | [Obsolete("SetShowApplicationProcessWindow is obsolete, use SetUseShel...
method SetUseShellExecute (line 64) | public YamsConfigBuilder SetUseShellExecute(bool value)
method AddClusterProperty (line 70) | public YamsConfigBuilder AddClusterProperty(string key, string value)
method SetGracefulShutdownMessageTimeout (line 76) | public YamsConfigBuilder SetGracefulShutdownMessageTimeout(TimeSpan ti...
method SetAppGracefulShutdownTimeout (line 82) | public YamsConfigBuilder SetAppGracefulShutdownTimeout(TimeSpan timeout)
method SetAppHeartBeatTimeout (line 88) | public YamsConfigBuilder SetAppHeartBeatTimeout(TimeSpan timeout)
method SetIpcConnectTimeout (line 94) | public YamsConfigBuilder SetIpcConnectTimeout(TimeSpan timeout)
method SetAppInitTimeout (line 100) | public YamsConfigBuilder SetAppInitTimeout(TimeSpan timeout)
method SetUpdateSessionTtl (line 106) | public YamsConfigBuilder SetUpdateSessionTtl(TimeSpan ttl)
method Build (line 112) | public YamsConfig Build()
FILE: src/Etg.Yams.Core/YamsDiModule.cs
class YamsDiModule (line 20) | public class YamsDiModule
method YamsDiModule (line 24) | public YamsDiModule(YamsConfig config, IDeploymentRepository deploymen...
method YamsDiModule (line 32) | public YamsDiModule(IContainer container)
method RegisterTypes (line 41) | public static ContainerBuilder RegisterTypes(YamsConfig config,
method RegisterAppDeploymentMatcher (line 88) | private static void RegisterAppDeploymentMatcher(ContainerBuilder buil...
method RegisterDeploymentWatcher (line 99) | private static void RegisterDeploymentWatcher(ContainerBuilder builder)
method RegisterApplicationUpdateManager (line 109) | private static void RegisterApplicationUpdateManager(ContainerBuilder ...
method RegisterConfigurableApplicationFactory (line 122) | private static void RegisterConfigurableApplicationFactory(ContainerBu...
method RegisterProcessStopper (line 128) | private static void RegisterProcessStopper(ContainerBuilder builder)
method RegisterApplicationConfigParser (line 137) | private static void RegisterApplicationConfigParser(ContainerBuilder b...
method RegisterApplicationConfigSymbolResolver (line 142) | private static void RegisterApplicationConfigSymbolResolver(ContainerB...
method RegisterApplicationPool (line 151) | private static void RegisterApplicationPool(ContainerBuilder builder)
method RegisterApplicationDownloader (line 156) | private static void RegisterApplicationDownloader(ContainerBuilder bui...
method RegisterApplicationInstaller (line 166) | private static void RegisterApplicationInstaller(ContainerBuilder buil...
method RegisterProcessFactory (line 177) | private static void RegisterProcessFactory(ContainerBuilder builder)
method RegisterConfig (line 187) | private static void RegisterConfig(ContainerBuilder builder, YamsConfi...
method RegisterApplicationDeploymentDirectory (line 192) | private static void RegisterApplicationDeploymentDirectory(ContainerBu...
FILE: src/Etg.Yams.Core/YamsService.cs
class YamsService (line 12) | public class YamsService : IYamsService, IDisposable
method YamsService (line 17) | public YamsService(IDeploymentWatcher deploymentWatcher, IApplicationP...
method Start (line 23) | public Task Start()
method Stop (line 28) | public async Task Stop()
method Dispose (line 34) | public void Dispose()
FILE: src/Etg.Yams.Host/Program.cs
class Program (line 8) | class Program
method Main (line 10) | static void Main(string[] args)
method MainAsync (line 16) | static async Task MainAsync(string[] args)
FILE: src/Etg.Yams.Ipc/IIpcConnection.cs
type IIpcConnection (line 6) | public interface IIpcConnection : IDisposable
method SendMessage (line 8) | Task SendMessage(string message);
method ReadMessage (line 9) | Task<string> ReadMessage();
method Connect (line 10) | Task Connect();
method Disconnect (line 11) | Task Disconnect();
FILE: src/Etg.Yams.Ipc/INamedPipe.cs
type INamedPipe (line 6) | public interface INamedPipe : IDisposable
method Connect (line 11) | void Connect();
method Disconnect (line 12) | void Disconnect();
FILE: src/Etg.Yams.Ipc/INamedPipeFactory.cs
type INamedPipeFactory (line 3) | public interface INamedPipeFactory
method CreateServer (line 5) | INamedPipe CreateServer(string pipeName);
method CreateClient (line 6) | INamedPipe CreateClient(string pipeName);
FILE: src/Etg.Yams.Ipc/IpcConnection.cs
class IpcConnection (line 7) | public class IpcConnection : IIpcConnection
method IpcConnection (line 13) | public IpcConnection(INamedPipe namedPipe)
method SendMessage (line 18) | public async Task SendMessage(string message)
method ReadMessage (line 24) | public Task<string> ReadMessage()
method Connect (line 30) | public async Task Connect()
method Dispose (line 45) | public void Dispose()
method Disconnect (line 51) | public Task Disconnect()
method EnsureConnected (line 64) | private void EnsureConnected()
FILE: src/Etg.Yams.Ipc/NamedPipeClientAdapter.cs
class NamedPipeClientAdapter (line 9) | [ExcludeFromCodeCoverage]
method NamedPipeClientAdapter (line 18) | public NamedPipeClientAdapter(string pipeName)
method Connect (line 24) | public void Connect()
method Disconnect (line 29) | public void Disconnect()
method Dispose (line 37) | public void Dispose()
FILE: src/Etg.Yams.Ipc/NamedPipeFactory.cs
class NamedPipeFactory (line 3) | public class NamedPipeFactory : INamedPipeFactory
method CreateServer (line 5) | public INamedPipe CreateServer(string pipeName)
method CreateClient (line 10) | public INamedPipe CreateClient(string pipeName)
FILE: src/Etg.Yams.Ipc/NamedPipeServerAdapter.cs
class NamedPipeServerAdapter (line 6) | public class NamedPipeServerAdapter : INamedPipe
method NamedPipeServerAdapter (line 10) | public NamedPipeServerAdapter(string pipeName)
method Connect (line 20) | public void Connect()
method Disconnect (line 25) | public void Disconnect()
method Dispose (line 30) | public void Dispose()
FILE: src/Etg.Yams.Powershell/ConnectDeploymentRepositoryCmdlet.cs
class ConnectDeploymentRepositoryCmdlet (line 8) | [Cmdlet(VerbsCommunications.Connect, "DeploymentRepository")]
method ProcessRecord (line 16) | protected override void ProcessRecord()
FILE: src/Etg.Yams.Powershell/GetDeploymentConfigCmdlet.cs
class GetDeploymentConfigCmdlet (line 8) | [Cmdlet(VerbsCommon.Get, "DeploymentConfig")]
method ProcessRecord (line 15) | protected override void ProcessRecord()
FILE: src/Etg.Yams.Powershell/GetDeploymentStatusCmdlet.cs
class GetDeploymentStatusCmdlet (line 11) | [Cmdlet(VerbsCommon.Get, "DeploymentStatus")]
method ProcessRecord (line 26) | protected override void ProcessRecord()
method GetDeploymentStatus (line 56) | private DeploymentStatus GetDeploymentStatus(BlobStorageDeploymentRepo...
method GetClusterDeploymentStatus (line 65) | private DeploymentStatus GetClusterDeploymentStatus(BlobStorageDeploym...
method GetAllClustersDeploymentStatus (line 72) | private DeploymentStatus GetAllClustersDeploymentStatus(BlobStorageDep...
FILE: src/Etg.Yams.Powershell/InstallApplicationsCmdlet.cs
class InstallApplicationsCmdlet (line 16) | [Cmdlet(VerbsLifecycle.Install, "Applications")]
method ProcessRecord (line 57) | protected override void ProcessRecord()
class AppInfo (line 236) | private class AppInfo
FILE: src/Etg.Yams.Powershell/SetDeploymentConfigCmdlet.cs
class SetDeploymentConfigCmdlet (line 8) | [Cmdlet(VerbsCommon.Set, "DeploymentConfig")]
method ProcessRecord (line 18) | protected override void ProcessRecord()
FILE: src/Etg.Yams.Powershell/UninstallApplicationsCmdlet.cs
class UninstallApplicationsCmdlet (line 9) | [Cmdlet(VerbsLifecycle.Uninstall, "Applications")]
method ProcessRecord (line 27) | protected override void ProcessRecord()
FILE: src/Etg.Yams/YamsServiceFactory.cs
class YamsServiceFactory (line 7) | public class YamsServiceFactory
method Create (line 9) | public static IYamsService Create(YamsConfig yamsConfig, string deploy...
FILE: test/AzureBlobStorageDeploymentRepositoryTest/BlobStorageDeploymentRepositoryTest.cs
class BlobStorageDeploymentRepositoryTest (line 22) | [Trait("Category", "Integration")]
method BlobStorageDeploymentRepositoryTest (line 40) | public BlobStorageDeploymentRepositoryTest(AzureStorageEmulatorTestFix...
method TestGetDeploymentConfigWhenTheFileIsNotThere (line 52) | [Fact]
method TestPublishThenFetchDeploymentConfig (line 59) | [Fact]
method TestUploadApplicationBinaries (line 69) | [Fact]
method TestUploadApplicationBinaries_FailIfBinariesExistMode (line 77) | [Fact]
method TestUploadApplicationBinaries_DoNothingBinariesExistMode (line 90) | [Fact]
method TestUploadApplicationBinaries_OverwriteExistingBinariesMode (line 99) | [Fact]
method TestUploadApplicationBinaries_EmptyBinariesDir (line 109) | [Fact]
method TestUploadApplicationBinaries_NonExistingBinariesDir (line 120) | [Fact]
method TestHasBinaries (line 133) | [Fact]
method TestDeleteApplicationBinaries (line 141) | [Fact]
method TestDeleteNonExistingApplicationBinaries (line 151) | [Fact]
method TestDownloadApplicationBinaries (line 158) | [Fact]
method TestDownloadApplicationBinaries_ConflictResolutionMode (line 169) | [Fact]
method TestDownloadNonExistingApplicationBinaries (line 194) | [Fact]
method VerifyBlobStorageContent (line 207) | private static async Task VerifyBlobStorageContent(string someJsonCont...
method GetCurrentMethodName (line 217) | [MethodImpl(MethodImplOptions.NoInlining)]
method VerifyBinariesExist (line 225) | private static void VerifyBinariesExist(string path, string testFileCo...
method UploadTestApplicationBinaries (line 231) | private static async Task UploadTestApplicationBinaries(ConflictResolu...
method CreateTestFile (line 239) | private static void CreateTestFile(string testDir, string testFileCont...
method CreateTestTempDirectory (line 245) | private static async Task<string> CreateTestTempDirectory(string testN...
FILE: test/AzureBlobStorageUpdateSessionTest/UpdateSession/AzureTableUpdateSessionManagerTests.cs
class AzureTableUpdateSessionManagerTests (line 16) | [Trait("Category", "Integration")]
method AzureTableUpdateSessionManagerTests (line 24) | public AzureTableUpdateSessionManagerTests(AzureStorageEmulatorTestFix...
method TestStartUpdateSessionSimple (line 35) | [Fact]
method TestThatOnlyOneUpdateDomainCanUpdateAtATime (line 41) | [Fact]
method CreateUpdateSessionManager (line 49) | private static IUpdateSessionManager CreateUpdateSessionManager(string...
method TestThatMultipleInstancesInTheSameUpdateDomainCanUpdateSimultaneously (line 55) | [Fact]
method TestThatEndUpdateSessionWorks (line 64) | [Fact]
method TestThatDifferentDeploymentsCanUpdateIndependently (line 75) | [Fact]
method TestThatMultipleAppsCanUpdateSimultaneously (line 84) | [Fact]
method TestEdgeCase_InstanceEnlists_SetUpdateDomain_Race (line 91) | [Fact]
method TestEdgeCase_InstanceEnlists_InsertUpdateDomain_Race (line 111) | [Fact]
method TestEdgeCase_SetUpdateDomainRace (line 128) | [Fact]
method TestEdgeCase_InsertUpdateDomainRace (line 151) | [Fact]
method TestThatStorageExceptionsAreRetried (line 167) | [Fact]
method ReplaceExecuteTransactionImplementation (line 192) | private IUpdateSessionTable ReplaceExecuteTransactionImplementation(IU...
FILE: test/AzureBlobStorageUpdateSessionTest/UpdateSession/Retry/UpdateBlobFactoryRetryLockDecoratorTest.cs
class UpdateBlobFactoryRetryLockDecoratorTest (line 12) | public class UpdateBlobFactoryRetryLockDecoratorTest
method TestSuccessfullRetry (line 14) | [Fact]
method TestThatExceptionIsThrownIfMaxRetryCountIsReached (line 32) | [Fact]
method TestThatNotAllExceptionsAreRetried (line 51) | [Fact]
FILE: test/AzureBlobStorageUpdateSessionTest/UpdateSession/Retry/UpdateSessionManagerRetryDecoratorTest.cs
class UpdateSessionManagerRetryDecoratorTest (line 13) | public class UpdateSessionManagerRetryDecoratorTest
method TestThatStartUpdateSessionIsRetried (line 15) | [Fact]
method TestThatEndUpdateSessionIsRetried (line 32) | [Fact]
method TestThatExceptionIsThrownIfMaxRetryCountIsReached (line 49) | [Fact]
method TestThatNotAllExceptionsAreRetried (line 66) | [Fact]
FILE: test/AzureBlobStorageUpdateSessionTest/UpdateSession/UpdateBlobTest.cs
class UpdateBlobTest (line 14) | [Trait("Category", "Integration")]
method UpdateBlobTest (line 20) | public UpdateBlobTest(AzureStorageEmulatorTestFixture fixture)
method TestSetDataWhenBlobIsEmpty (line 30) | [Fact]
method TestAddingMultipleInstanceIds (line 46) | [Fact]
method TestRemoveInstanceId (line 61) | [Fact]
method TestGetUpdateDomainOnEmptyBlob (line 89) | [Fact]
method TestGetInstanceIdsOnEmptyBlob (line 96) | [Fact]
method TestThatUpdateBlobMustBeLockedBeforeAnyOperation (line 103) | [Fact]
method TestFlushWhenInstanceAreSetButNoUpdateDomain (line 116) | [Fact]
method TestThatDisposeReleasesTheLease (line 124) | [Fact]
method TestThatLockFailsIfBlobLeaseReturnsNull (line 132) | [Fact]
method TestThatLockFailsIfBlobLeaseThrowsStorageException (line 142) | [Fact]
method TestThatLockFailsIfBlobLeaseCantBeAcquired (line 152) | private async Task TestThatLockFailsIfBlobLeaseCantBeAcquired(IBlobLea...
FILE: test/AzureTestUtils/AzureStorageEmulatorProxy.cs
class AzureStorageEmulatorProxy (line 8) | public class AzureStorageEmulatorProxy
method AzureStorageEmulatorProxy (line 14) | public AzureStorageEmulatorProxy()
method StartEmulator (line 29) | public void StartEmulator()
method StopEmulator (line 34) | public void StopEmulator()
method ClearBlobStorage (line 39) | public void ClearBlobStorage()
method ExecuteCommandOnEmulator (line 44) | private void ExecuteCommandOnEmulator(string arguments)
FILE: test/AzureTestUtils/Fixtures/AzureStorageEmulatorTestFixture.cs
class AzureStorageEmulatorTestFixture (line 6) | public class AzureStorageEmulatorTestFixture
method AzureStorageEmulatorTestFixture (line 10) | public AzureStorageEmulatorTestFixture()
method ClearBlobStorage (line 19) | public void ClearBlobStorage()
method Dispose (line 24) | public void Dispose()
FILE: test/AzureUtilsTest/BlobUtilsTest.cs
class BlobUtilsTest (line 14) | [Trait("Category", "Integration")]
method BlobUtilsTest (line 19) | public BlobUtilsTest(AzureStorageEmulatorTestFixture fixture)
method TestDownloadBlobsFromBlobDirectory (line 25) | [Fact]
method ListFilesPath (line 67) | private static ISet<string> ListFilesPath(string appPath)
method TestDeleteBlobDirectory (line 79) | [Fact]
method TestUploadFile (line 89) | [Fact]
method TestUploadDirectory (line 108) | [Fact]
method TestCreateBlobIfNotExists (line 135) | [Fact]
method VerifyThatAllFilesAreThere (line 150) | private static void VerifyThatAllFilesAreThere(ISet<string> relativePa...
method CreateBlobsTree (line 164) | private async Task<CloudBlobDirectory> CreateBlobsTree()
method CreateLocalFileTree (line 216) | private async Task<string> CreateLocalFileTree(string testName)
method CreateNewDirectory (line 264) | private async Task CreateNewDirectory(string path)
method CreateFile (line 270) | private void CreateFile(string dir, string relPath)
method GetTestDirPath (line 277) | private string GetTestDirPath(string testName)
FILE: test/Etg.Yams.Core.Test/Application/ApplicationConfigParserTest.cs
class ApplicationConfigParserTest (line 15) | public class ApplicationConfigParserTest
method TestParseApplicationConfig (line 17) | [Fact]
FILE: test/Etg.Yams.Core.Test/Application/ApplicationConfigSymbolResolverTest.cs
class ApplicationConfigSymbolResolverTest (line 9) | public class ApplicationConfigSymbolResolverTest
method TestResolve (line 11) | [Fact]
method TestThatAppPropertiesOverwritesClusterProperties (line 29) | [Fact]
FILE: test/Etg.Yams.Core.Test/Application/ApplicationPoolTest.cs
class ApplicationPoolTestFixture (line 17) | public class ApplicationPoolTestFixture
method ApplicationPoolTestFixture (line 24) | public ApplicationPoolTestFixture()
class ApplicationPoolTest (line 53) | public class ApplicationPoolTest : IClassFixture<ApplicationPoolTestFixt...
method ApplicationPoolTest (line 59) | public ApplicationPoolTest(ApplicationPoolTestFixture fixture)
method Dispose (line 66) | public void Dispose()
method TestAddApplication (line 71) | [Fact]
method AddApplication (line 82) | private async Task AddApplication(AppInstallConfig appInstallConfig)
method GetApplicationPath (line 89) | private string GetApplicationPath(AppIdentity appIdentity)
method TestThatAddExistingApplicationThrowsAnException (line 95) | [Fact]
method TestThatGetApplicationReturnsNullIfApplicationDoesntExist (line 106) | [Fact]
method TestRemoveApplication (line 113) | [Fact]
method TestRemoveApplicationThatThrowsWhenStopped (line 145) | [Fact]
method TestThatAnExceptionIsThrownIfApplicationFailsToStart (line 164) | [Fact]
method TestThatExitedApplicationsAreRemoved (line 176) | [Fact]
method TestThatRemoveNonExistingApplicationThrowsAnException (line 189) | [Fact]
method GetOutput (line 199) | private string GetOutput(AppIdentity appIdentity)
FILE: test/Etg.Yams.Core.Test/Application/ApplicationTest.cs
class ApplicationTestFixture (line 12) | public class ApplicationTestFixture : IDisposable
method ApplicationTestFixture (line 19) | public ApplicationTestFixture()
method Dispose (line 25) | public void Dispose() { }
class ApplicationTest (line 28) | public class ApplicationTest : IClassFixture<ApplicationTestFixture>
method ApplicationTest (line 32) | public ApplicationTest(ApplicationTestFixture fixture)
method TestStartProcessHappyPath (line 37) | [Fact]
method TestThatStartFailsIfProcessFailsToStart (line 80) | [Fact]
method TestThatStopStopsTheProcess (line 96) | [Fact]
method TestThatExitedEventIsEmittedWhenProcessFails (line 120) | [Fact]
FILE: test/Etg.Yams.Core.Test/Client/YamsProcessArgsParserTest.cs
class YamsProcessArgsParserTest (line 6) | public class YamsProcessArgsParserTest
method TestParseOneArg (line 8) | [Fact]
method TestParseTwoArgs (line 18) | [Fact]
method TestParseAllArgs (line 28) | [Fact]
method TestThatParseArgsIgnoresAdditionalArgs (line 38) | [Fact]
method TestParseAppNameArg (line 50) | [Fact]
method TestParseAppVersionArg (line 59) | [Fact]
method TestThatParseEmptyArgsIsOk (line 68) | [Fact]
FILE: test/Etg.Yams.Core.Test/EndToEndTest.cs
class EndToEndTest (line 23) | public class EndToEndTest : IDisposable
method EndToEndTest (line 33) | public EndToEndTest()
method InitializeYamsService (line 45) | private void InitializeYamsService(YamsConfig yamsConfig)
method InitializeYamsService (line 51) | private void InitializeYamsService(IContainer container)
method InitializeContainerBuilder (line 57) | private ContainerBuilder InitializeContainerBuilder(YamsConfig yamsCon...
method CopyTestProcessExeToTestApps (line 71) | private void CopyTestProcessExeToTestApps()
method Dispose (line 93) | public void Dispose()
method TestMultipleUpdates (line 110) | [Fact]
method VerifyThatDeploymentStatusHasBeenUpdated (line 157) | private void VerifyThatDeploymentStatusHasBeenUpdated(InstanceDeployme...
method UploadDeploymentConfig (line 168) | private void UploadDeploymentConfig(string deploymentConfigFileName)
method TestThatClusterPropertiesAreUsedToMatchDeployments (line 174) | [Fact]
method TestApplicationWithHeartBeat (line 210) | [Fact]
method TestApplicationWithHeartBeatTimeout (line 220) | [Fact]
method RunHeartBeatTest (line 226) | private async Task RunHeartBeatTest(TimeSpan heartBeatTimeout)
method TestApplicationWithMonitoredInitialization (line 247) | [Fact]
method TestApplicationWithGracefulShutdown (line 265) | [Fact]
method TestApplicationWithGracefulShutdownTimeout (line 271) | [Fact]
method RunGracefulShutdownTest (line 277) | private async Task RunGracefulShutdownTest(TimeSpan gracefulShutdownTi...
method TestFullIpcApp (line 297) | [Fact]
method AssertThatApplicationIsRunning (line 319) | public void AssertThatApplicationIsRunning(AppIdentity appIdentity, st...
method CopyAppBinariesToAppDeploymentDir (line 331) | private async Task CopyAppBinariesToAppDeploymentDir(string appName, s...
method AssertThatApplicationIsNotRunning (line 339) | public void AssertThatApplicationIsNotRunning(AppIdentity appIdentity)
method AssertThatNumberOfApplicationsRunningIs (line 346) | public void AssertThatNumberOfApplicationsRunningIs(int count)
method DeleteDirectory (line 352) | private static void DeleteDirectory(string path)
FILE: test/Etg.Yams.Core.Test/Install/ApplicationInstallerTest.cs
class ApplicationInstallerTest (line 15) | public class ApplicationInstallerTest
method ApplicationInstallerTest (line 21) | public ApplicationInstallerTest()
method TestInstallApplication (line 26) | [Fact]
method TestRemoveApplication (line 39) | [Fact]
method TestUpdateApplication (line 61) | [Fact]
FILE: test/Etg.Yams.Core.Test/Process/GracefulShutdownProcessDecoratorTest.cs
class GracefulShutdownProcessDecoratorTest (line 9) | public class GracefulShutdownProcessDecoratorTest
method TestThatExitedEventIsNotFiredOnGracefulShutdown (line 11) | [Fact]
FILE: test/Etg.Yams.Core.Test/Process/ProcessStopperTest.cs
class ProcessStopperTest (line 8) | public class ProcessStopperTest
method TestThatProcessIsClosedFirst (line 10) | [Fact]
method TestThatProcessIsKilledIfItWontClose (line 41) | [Fact]
method TestThatExceptionIsCaughtAndSwallowedIfKillBlowsUp (line 69) | [Fact]
FILE: test/Etg.Yams.Core.Test/Process/ProcessTest.cs
class ProcessTestFixture (line 12) | public class ProcessTestFixture
method ProcessTestFixture (line 22) | public ProcessTestFixture()
class ProcessTest (line 33) | public class ProcessTest : IClassFixture<ProcessTestFixture>
method ProcessTest (line 36) | public ProcessTest(ProcessTestFixture fixture)
method TestIsRunning (line 41) | [Fact]
method TestThatProcessCannotBeStartedMoreThanOnce (line 53) | [Fact]
method TestReleaseResources (line 65) | [Fact]
method TestThatExitedEventIsFired (line 79) | [Fact(Skip = "For some reason this test is flaky on CI builds. Disabli...
method TestProperties (line 94) | [Fact]
FILE: test/Etg.Yams.Core.Test/Process/SelfRestartingProcessTest.cs
class SelfRestartingProcessTest (line 9) | public class SelfRestartingProcessTest
method TestThatProcessIsRestarted (line 11) | [Fact]
method TestThatExitedIsRaisedIfProcessFailsToRestart (line 25) | [Fact]
method TestThatExitedIsRaisedIfProcessMaxRetryCountIsReached (line 46) | [Fact]
method SpinWaitForRestart (line 71) | private Task<bool> SpinWaitForRestart(SelfRestartingProcess selfRestar...
method SpinWaitFor (line 76) | private async Task<bool> SpinWaitFor(Func<bool> func)
FILE: test/Etg.Yams.Core.Test/Storage/DeploymentConfigTest.cs
class DeploymentConfigTestFixture (line 14) | public class DeploymentConfigTestFixture
method DeploymentConfigTestFixture (line 23) | public DeploymentConfigTestFixture()
method ParseTestDeploymentConfig (line 29) | public DeploymentConfig ParseTestDeploymentConfig()
class DeploymentConfigTest (line 35) | public class DeploymentConfigTest : IClassFixture<DeploymentConfigTestFi...
method DeploymentConfigTest (line 40) | public DeploymentConfigTest(DeploymentConfigTestFixture fixture)
method TestListApplications (line 47) | [Fact]
method TestListApplicationsForGivenClusterId (line 54) | [Fact]
method TestListVersions (line 67) | [Fact]
method TestListVersionsForAnAppThatIsNotThere (line 74) | [Fact]
method TestListVersionsWithClusterId (line 80) | [Fact]
method TestListVersionsWithClusterIdForAnAppThatIsNotThere (line 91) | [Fact]
method TestListDeploymentsForApp (line 97) | [Fact]
method TestListDeploymentsForAppThatIsNotThere (line 106) | [Fact]
method TestListDeploymentsForVersion (line 112) | [Fact]
method TestListDeploymentsForVersionThatIsNotThere (line 123) | [Fact]
method TestListDeploymentsForVersionButAppIsNotThere (line 129) | [Fact]
method TestAddDeploymentForNewApp (line 135) | [Fact]
method TestAddDeploymentForExistingApp (line 146) | [Fact]
method TestAddDeploymentForExistingVersion (line 155) | [Fact]
method TestAddExistingDeployment (line 164) | [Fact]
method TestRemoveApplication (line 170) | [Fact]
method TestThatRemoveApplicationForAnAppThatIsNotThere (line 177) | [Fact]
method TestRemoveVersion (line 184) | [Fact]
method TestThatRemoveLastVersionAlsoRemovesTheApp (line 191) | [Fact]
method TestRemoveVersionForAnAppThatIsNotThere (line 198) | [Fact]
method TestRemoveVersionThatIsNotThere (line 205) | [Fact]
method TestRemoveDeployment (line 212) | [Fact]
method TestThatRemoveLastDeploymentAlsoRemovesVersion (line 220) | [Fact]
method TestThatRemoveLastDeploymentAlsoRemovesApplication (line 227) | [Fact]
method TestRemoveDeploymentForAnAppThatIsNotThere (line 234) | [Fact]
method TestRemoveDeploymentForAVersionThatIsNotThere (line 241) | [Fact]
method TestRemoveADeploymentThatIsNotThere (line 248) | [Fact]
method TestSerializeRoundTrip (line 254) | [Fact]
method TestHasApplication_appId (line 264) | [Fact]
method TestHasApplication_appId_version (line 271) | [Fact]
method TestHasApplication_appId_version_clusterId (line 279) | [Fact]
method TestThatPropertiesAreParsed (line 288) | [Fact]
method TestSetApplicationConfig (line 296) | [Fact]
method TestThatSetApplicationConfigOverwritesExisting (line 306) | [Fact]
method TestEqualsAndHashCode (line 321) | [Fact]
FILE: test/Etg.Yams.Core.Test/Storage/LocalDeploymentRepository.cs
class LocalDeploymentRepository (line 12) | public class LocalDeploymentRepository : IDeploymentRepository, IDeploym...
method LocalDeploymentRepository (line 19) | public LocalDeploymentRepository(string path, IDeploymentConfigSeriali...
method FetchDeploymentConfig (line 28) | public Task<DeploymentConfig> FetchDeploymentConfig()
method PublishDeploymentConfig (line 34) | public Task PublishDeploymentConfig(DeploymentConfig deploymentConfig)
method UploadApplicationBinaries (line 40) | public Task UploadApplicationBinaries(AppIdentity appIdentity, string ...
method GetBinariesPath (line 64) | private string GetBinariesPath(AppIdentity appIdentity)
method GetDeploymentRelativePath (line 69) | private static string GetDeploymentRelativePath(AppIdentity appIdentity)
method DeleteApplicationBinaries (line 74) | public Task DeleteApplicationBinaries(AppIdentity appIdentity)
method HasApplicationBinaries (line 86) | public Task<bool> HasApplicationBinaries(AppIdentity appIdentity)
method DownloadApplicationBinaries (line 92) | public async Task DownloadApplicationBinaries(AppIdentity appIdentity,...
method FetchInstanceDeploymentStatus (line 116) | public Task<InstanceDeploymentStatus> FetchInstanceDeploymentStatus(st...
method PublishInstanceDeploymentStatus (line 123) | public Task PublishInstanceDeploymentStatus(string clusterId, string i...
method GetInstanceDeploymentStatusPath (line 136) | private string GetInstanceDeploymentStatusPath(string clusterId, strin...
FILE: test/Etg.Yams.Core.Test/System/SystemExtensionsTest.cs
class SystemExtensionsTest (line 7) | public class SystemExtensionsTest
method TestGetPath (line 9) | [Theory]
FILE: test/Etg.Yams.Core.Test/Update/ApplicationUpdateManagerTest.cs
class ApplicationUpdateManagerTest (line 20) | public class ApplicationUpdateManagerTest
method ApplicationUpdateManagerTest (line 35) | public ApplicationUpdateManagerTest()
method TestMultipleUpdates (line 71) | [Fact]
method TestThatUpdateDoesNothingIfCannotStartUpdateSession (line 107) | [Fact]
method TestThatUpdateSessionIsEndedFollowingASuccessfulUpdate (line 135) | [Fact]
method TestThatUpdateSessionIsNotEndedWhenUpdateFails (line 170) | [Fact]
method VerifyThatDeploymentStatusHasBeenUpdated (line 202) | private void VerifyThatDeploymentStatusHasBeenUpdated(InstanceDeployme...
FILE: test/Etg.Yams.Core.Test/Utils/AssertUtils.cs
class AssertUtils (line 6) | public static class AssertUtils
method ContainsSameElementsInAnyOrder (line 8) | public static void ContainsSameElementsInAnyOrder<T>(IEnumerable<T> ex...
FILE: test/Etg.Yams.Core.Test/Utils/TestUtils.cs
class TestUtils (line 8) | public static class TestUtils
method GetTestApplicationOutput (line 10) | public static string GetTestApplicationOutput(string applicationRootPa...
method GetTestExesDirPath (line 32) | public static string GetTestExesDirPath()
method CopyExe (line 37) | public static void CopyExe(string exeName, string destPath)
method CopyExesTestDir (line 42) | public static void CopyExesTestDir(string destPath)
FILE: test/Etg.Yams.Core.Test/stubs/ApplicationFactoryStub.cs
class ApplicationFactoryStub (line 8) | public class ApplicationFactoryStub : IApplicationFactory
method CreateApplication (line 10) | public Task<IApplication> CreateApplication(AppInstallConfig appInstal...
FILE: test/Etg.Yams.Core.Test/stubs/ApplicationInstallerStub.cs
class ApplicationInstallerStub (line 8) | public class ApplicationInstallerStub : IApplicationInstaller
method ApplicationInstallerStub (line 13) | public ApplicationInstallerStub(IApplicationPool applicationPool, stri...
method Install (line 19) | public Task Install(AppInstallConfig appInstallConfig)
method GetAppPath (line 25) | private string GetAppPath(AppInstallConfig appInstallConfig)
method UnInstall (line 30) | public Task UnInstall(AppIdentity appIdentity)
method Update (line 36) | public Task<bool> Update(IEnumerable<AppIdentity> applicationsToRemove...
FILE: test/Etg.Yams.Core.Test/stubs/ApplicationPoolStub.cs
class ApplicationPoolStub (line 8) | public class ApplicationPoolStub : IApplicationPool
method ApplicationPoolStub (line 13) | public ApplicationPoolStub()
method AddApplication (line 19) | public Task AddApplication(IApplication application)
method RemoveApplication (line 30) | public Task RemoveApplication(AppIdentity appIdentity)
method HasApplication (line 36) | public bool HasApplication(AppIdentity appIdentity)
method GetApplication (line 41) | public IApplication GetApplication(AppIdentity appIdentity)
method Shutdown (line 51) | public Task Shutdown()
method HasApplicationBeenAdded (line 56) | public bool HasApplicationBeenAdded(AppIdentity appIdentity)
method Dispose (line 61) | public void Dispose()
FILE: test/Etg.Yams.Core.Test/stubs/ApplicationStub.cs
class ApplicationStub (line 7) | public class ApplicationStub : IApplication
method ApplicationStub (line 14) | public ApplicationStub(AppIdentity appIdentity, string path)
method Start (line 20) | public Task<bool> Start()
method Stop (line 26) | public Task Stop()
method IsRunning (line 32) | public bool IsRunning()
method Fail (line 37) | public void Fail()
method Dispose (line 43) | public void Dispose()
FILE: test/Etg.Yams.Core.Test/stubs/ProcessStub.cs
class ProcessStub (line 7) | public class ProcessStub : IProcess
method ProcessStub (line 12) | public ProcessStub(string exePath)
method Start (line 28) | public Task Start(string exeArgs)
method Close (line 39) | public Task Close()
method Kill (line 45) | public Task Kill()
method ReleaseResources (line 51) | public Task ReleaseResources()
method RaiseExitedEvent (line 70) | public void RaiseExitedEvent()
method Dispose (line 78) | public void Dispose()
FILE: test/FullIpcProcess/Program.cs
class Program (line 8) | internal class Program
method Main (line 10) | public static void Main(string[] args)
method Run (line 15) | private static async Task Run(string[] args)
method Shutdown (line 49) | private static async Task Shutdown()
method DoWork (line 54) | private static async Task DoWork()
method Initialize (line 60) | private static Task Initialize()
FILE: test/GracefullShutdownProcess/Program.cs
class Program (line 8) | internal class Program
method Main (line 10) | public static void Main(string[] args)
method Run (line 15) | private static async Task Run(string[] args)
FILE: test/HangingProcess/Program.cs
class Program (line 5) | class Program
method Main (line 7) | static void Main(string[] args)
FILE: test/HeartBeatProcess/Program.cs
class Program (line 8) | internal class Program
method Main (line 10) | public static void Main(string[] args)
method Run (line 15) | private static async Task Run(string[] args)
FILE: test/MonitorInitProcess/Program.cs
class Program (line 8) | internal class Program
method Main (line 10) | public static void Main(string[] args)
method Run (line 15) | private static async Task Run(string[] args)
FILE: test/SuicidalProcess/Program.cs
class Program (line 3) | class Program
method Main (line 5) | static void Main(string[] args)
FILE: test/TestProcess/Program.cs
class Program (line 7) | class Program
method Main (line 9) | static void Main(string[] args)
method Run (line 14) | private void Run(string[] args)
FILE: test/TestUtils/AssertUtils.cs
class AssertUtils (line 6) | public static class AssertUtils
method ContainsSameElementsInAnyOrder (line 8) | public static void ContainsSameElementsInAnyOrder<T>(IEnumerable<T> ex...
FILE: test/TestUtils/AsyncUtils.cs
class AsyncUtils (line 10) | public class AsyncUtils
method AsyncTaskThatThrows (line 12) | public static Task<TReturnType> AsyncTaskThatThrows<TReturnType>(Excep...
method AsyncTaskThatThrows (line 19) | public static Task AsyncTaskThatThrows(Exception exception)
method AsyncTaskWithResult (line 24) | public static Task<TReturnType> AsyncTaskWithResult<TReturnType>(TRetu...
Condensed preview — 410 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,069K chars).
[
{
"path": ".gitattributes",
"chars": 2518,
"preview": "###############################################################################\n# Set default behavior to automatically "
},
{
"path": ".gitignore",
"chars": 3022,
"preview": "## Ignore Visual Studio temporary files, build results, and\n## files generated by popular Visual Studio add-ons.\n\n# Igno"
},
{
"path": "Docs/Continuous_Integration.md",
"chars": 8128,
"preview": "# Continuous Integration with YAMS and VSTS\n\nIn this tutorial, we will demonstrate how to use YAMS in a continuous integ"
},
{
"path": "Docs/Contributor_Guide.md",
"chars": 777,
"preview": "# YAMS Contributor Guide\n\n## How to debug YAMS?\n\nTo debug YAMS code, simply use the `Etg.Yams.Host` console app availabl"
},
{
"path": "Docs/Deploy&Host_an_App_in_YAMS.md",
"chars": 13358,
"preview": "# Overview\n\nIn this tutorial, we will create a simple application and deploy it to YAMS. We will learn the following:\n* "
},
{
"path": "Docs/Deploy_Orleans_App_in_YAMS.md",
"chars": 7685,
"preview": "# Overview\nIn this tutorial, we will explain how to create and deploy an Orleans application in YAMS. We will also expla"
},
{
"path": "Docs/Deploy_YAMS.md",
"chars": 7152,
"preview": "# Overview\n\nThis tutorial will show you how to configure YAMS and deploy it to a cloud service. If you already have a YA"
},
{
"path": "Docs/Overview.md",
"chars": 17222,
"preview": "# YAMS Overview\n\nThe [Microsoft Azure cloud services](https://azure.microsoft.com/en-us/services/cloud-services/) platfo"
},
{
"path": "Docs/YAMS_Storage.md",
"chars": 4443,
"preview": "# YAMS Storage Tutorial\n\nThis tutorial demonstrates the use of the `IDeploymentRepository` Api which can be used to full"
},
{
"path": "Etg.Yams.sln",
"chars": 15118,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 15\nVisualStudioVersion = 15.0.26730.12\nMin"
},
{
"path": "Etg.Yams.sln.DotSettings",
"chars": 502,
"preview": "<wpf:ResourceDictionary xml:space=\"preserve\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" xmlns:s=\"clr-namesp"
},
{
"path": "LICENSE",
"chars": 1103,
"preview": "YAMS\n\nCopyright (c) Microsoft Corporation\n\nAll rights reserved. \n\nMIT License\n\nPermission is hereby granted, free of cha"
},
{
"path": "README.md",
"chars": 3662,
"preview": "YAMS\n=======\n\n[](https:"
},
{
"path": "SECURITY.md",
"chars": 2757,
"preview": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->\n\n## Security\n\nMicrosoft takes the security of our software products an"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.ARM.sln",
"chars": 1420,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.24720.0\nMini"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.Host/App.config",
"chars": 2884,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".NE"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.Host/Etg.Yams.Host.csproj",
"chars": 10278,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.Host/Program.cs",
"chars": 6668,
"preview": "#region\n\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Net;\nusing System.Security.Per"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.Host/Properties/AssemblyInfo.cs",
"chars": 1399,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/Etg.Yams.ARM/Etg.Yams.Host/packages.config",
"chars": 2209,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Autofac\" version=\"4.6.2\" targetFramework=\"net461\" />\n "
},
{
"path": "Samples/Etg.Yams.ARM/README.md",
"chars": 1216,
"preview": "# Yams Console/Windows Service Host #\n\nThe idea with this sample project is to be used as a Yams cluster note on a regul"
},
{
"path": "Samples/Etg.Yams.Cloud/Backend/Backend.csproj",
"chars": 5384,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/Backend/Properties/AssemblyInfo.cs",
"chars": 1387,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/Etg.Yams.Cloud/Backend/WorkerRole.cs",
"chars": 219,
"preview": "using Etg.Yams.WorkerRole;\n\nnamespace Backend\n{\n public class WorkerRole : YamsWorkerRole\n {\n protected ove"
},
{
"path": "Samples/Etg.Yams.Cloud/Backend/app.config",
"chars": 1219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <system.diagnostics>\n <trace>\n <listeners>\n <ad"
},
{
"path": "Samples/Etg.Yams.Cloud/Backend/packages.config",
"chars": 635,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/GCSettingsManagement.ps1",
"chars": 3765,
"preview": "<#\n//*********************************************************\n//\n// Copyright (c) Microsoft. All rights reserved.\n/"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/ServerGC.cmd",
"chars": 568,
"preview": "REM Check if the script is running in the Azure Emulator, and if so, do not run\nREM IF \"%IsEmulated%\"==\"true\" goto :EOF"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/BackendContent/diagnostics.wadcfgx",
"chars": 2481,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<DiagnosticsConfiguration xmlns=\"http://schemas.microsoft.com/ServiceHosting/20"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/Etg.Yams.Cloud.MultipleClusters.ccproj",
"chars": 3970,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/FrontendContent/diagnostics.wadcfgx",
"chars": 2481,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<DiagnosticsConfiguration xmlns=\"http://schemas.microsoft.com/ServiceHosting/20"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceConfiguration.Cloud.cscfg",
"chars": 2796,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceConfiguration serviceName=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microso"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceConfiguration.Local.cscfg",
"chars": 2738,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceConfiguration serviceName=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microso"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters/ServiceDefinition.csdef",
"chars": 2436,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceDefinition name=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microsoft.com/Ser"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.MultipleClusters.sln",
"chars": 2693,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25123.0\nMini"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/Etg.Yams.Cloud.SingleCluster.ccproj",
"chars": 3549,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceConfiguration.Cloud.cscfg",
"chars": 1534,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceConfiguration serviceName=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microso"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceConfiguration.Local.cscfg",
"chars": 1505,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceConfiguration serviceName=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microso"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/ServiceDefinition.csdef",
"chars": 1633,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ServiceDefinition name=\"Etg.Yams.Cloud\" xmlns=\"http://schemas.microsoft.com/Ser"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/GCSettingsManagement.ps1",
"chars": 3765,
"preview": "<#\n//*********************************************************\n//\n// Copyright (c) Microsoft. All rights reserved.\n/"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/ServerGC.cmd",
"chars": 568,
"preview": "REM Check if the script is running in the Azure Emulator, and if so, do not run\nREM IF \"%IsEmulated%\"==\"true\" goto :EOF"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster/SingleClusterRoleContent/diagnostics.wadcfgx",
"chars": 2481,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<DiagnosticsConfiguration xmlns=\"http://schemas.microsoft.com/ServiceHosting/20"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.Cloud.SingleCluster.sln",
"chars": 2242,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25123.0\nMini"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Etg.Yams.WorkerRole.csproj",
"chars": 12154,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Properties/AssemblyInfo.cs",
"chars": 1372,
"preview": "using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled "
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Properties/SlowCheetah/SlowCheetah.Transforms.targets",
"chars": 23603,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!--\n****************************************************************************"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Utils/AzureUtils.cs",
"chars": 272,
"preview": "using Microsoft.WindowsAzure.ServiceRuntime;\n\nnamespace Etg.Yams.WorkerRole.Utils\n{\n public static class AzureUtils\n"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/Utils/DeploymentIdUtils.cs",
"chars": 864,
"preview": "using Microsoft.WindowsAzure.ServiceRuntime;\n\nnamespace Etg.Yams.WorkerRole.Utils\n{\n public static class DeploymentI"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/WorkerRole.cs",
"chars": 3320,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Net;\nusing System.Security.Permissions;\nusing Sy"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/WorkerRoleConfig.cs",
"chars": 927,
"preview": "using System;\nusing Microsoft.WindowsAzure.ServiceRuntime;\n\nnamespace Etg.Yams.WorkerRole\n{\n public class WorkerRoleC"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/app.config",
"chars": 1219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <system.diagnostics>\n <trace>\n <listeners>\n <ad"
},
{
"path": "Samples/Etg.Yams.Cloud/Etg.Yams.WorkerRole/packages.config",
"chars": 2152,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Autofac\" version=\"3.5.2\" targetFramework=\"net451\" />\n "
},
{
"path": "Samples/Etg.Yams.Cloud/Frontend/Frontend.csproj",
"chars": 5386,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/Frontend/Properties/AssemblyInfo.cs",
"chars": 1389,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/Etg.Yams.Cloud/Frontend/WorkerRole.cs",
"chars": 220,
"preview": "using Etg.Yams.WorkerRole;\n\nnamespace Frontend\n{\n public class WorkerRole : YamsWorkerRole\n {\n protected ov"
},
{
"path": "Samples/Etg.Yams.Cloud/Frontend/app.config",
"chars": 1219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <system.diagnostics>\n <trace>\n <listeners>\n <ad"
},
{
"path": "Samples/Etg.Yams.Cloud/Frontend/packages.config",
"chars": 635,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "Samples/Etg.Yams.Cloud/SingleClusterRole/Properties/AssemblyInfo.cs",
"chars": 1407,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/Etg.Yams.Cloud/SingleClusterRole/SingleClusterRole.csproj",
"chars": 5404,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/Etg.Yams.Cloud/SingleClusterRole/WorkerRole.cs",
"chars": 228,
"preview": "using Etg.Yams.WorkerRole;\n\nnamespace SingleClusterRole\n{\n public class WorkerRole : YamsWorkerRole\n {\n pro"
},
{
"path": "Samples/Etg.Yams.Cloud/SingleClusterRole/app.config",
"chars": 1219,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <system.diagnostics>\n <trace>\n <listeners>\n <ad"
},
{
"path": "Samples/Etg.Yams.Cloud/SingleClusterRole/packages.config",
"chars": 635,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "Samples/OrleansApp/GrainInterfaces/GrainInterfaces.csproj",
"chars": 3735,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/OrleansApp/GrainInterfaces/IHelloGrain.cs",
"chars": 247,
"preview": "using System.Threading.Tasks;\nusing Orleans;\n\nnamespace GrainInterfaces\n{\n /// <summary>\n /// Grain interface IGr"
},
{
"path": "Samples/OrleansApp/GrainInterfaces/Properties/AssemblyInfo.cs",
"chars": 1402,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Inform"
},
{
"path": "Samples/OrleansApp/GrainInterfaces/packages.config",
"chars": 326,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Orleans.Core\" version=\"1.2.3\" targetFramewor"
},
{
"path": "Samples/OrleansApp/Grains/Grains.csproj",
"chars": 4729,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/OrleansApp/Grains/HelloGrain.cs",
"chars": 343,
"preview": "using System.Threading.Tasks;\nusing GrainInterfaces;\nusing Orleans;\n\nnamespace Grains\n{\n /// <summary>\n /// Grain"
},
{
"path": "Samples/OrleansApp/Grains/Properties/AssemblyInfo.cs",
"chars": 1384,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Inform"
},
{
"path": "Samples/OrleansApp/Grains/packages.config",
"chars": 326,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Orleans.Core\" version=\"1.2.3\" targetFramewor"
},
{
"path": "Samples/OrleansApp/OrleansApp.sln",
"chars": 2392,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.25123.0\nMini"
},
{
"path": "Samples/OrleansApp/SiloHost/App.config",
"chars": 582,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <runtime>\n <gcServer enabled=\"true\"/>\n <gcConcurrent enab"
},
{
"path": "Samples/OrleansApp/SiloHost/AppConfig.json",
"chars": 118,
"preview": "{\n \"ExeName\": \"SiloHost.exe\",\n \"ExeArgs\": \"deploymentid=${Id}_${Version.Major}.${Version.Minor}_${DeploymentId}\"\n}\n"
},
{
"path": "Samples/OrleansApp/SiloHost/OrleansHostWrapper.cs",
"chars": 5472,
"preview": "using System;\nusing System.Net;\nusing System.Reflection;\nusing Orleans.Runtime.Configuration;\nusing Orleans.Runtime;\n\nna"
},
{
"path": "Samples/OrleansApp/SiloHost/Program.cs",
"chars": 1737,
"preview": "using System;\nusing System.Net;\nusing Orleans.Runtime;\nusing Orleans.Runtime.Configuration;\n\nnamespace SiloHost\n{\n //"
},
{
"path": "Samples/OrleansApp/SiloHost/Properties/AssemblyInfo.cs",
"chars": 1388,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Inform"
},
{
"path": "Samples/OrleansApp/SiloHost/SiloHost.csproj",
"chars": 8690,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microso"
},
{
"path": "Samples/OrleansApp/SiloHost/packages.config",
"chars": 1820,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "Samples/OrleansApp/WebApp/App.config",
"chars": 528,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".NE"
},
{
"path": "Samples/OrleansApp/WebApp/App.cs",
"chars": 2475,
"preview": "using System;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Threading;\nusing Orleans;\nusi"
},
{
"path": "Samples/OrleansApp/WebApp/AppConfig.json",
"chars": 84,
"preview": "{\n \"ExeName\": \"WebApp.exe\",\n \"ExeArgs\": \"${Id} ${Version} ${DeploymentId}\"\n}\n"
},
{
"path": "Samples/OrleansApp/WebApp/ApplicationController.cs",
"chars": 590,
"preview": "using System.Threading.Tasks;\nusing System.Web.Http;\nusing Newtonsoft.Json.Linq;\n\nnamespace WebApp\n{\n [RoutePrefix(\""
},
{
"path": "Samples/OrleansApp/WebApp/OrleansHelloController.cs",
"chars": 461,
"preview": "using System;\nusing System.Threading.Tasks;\nusing System.Web.Http;\nusing GrainInterfaces;\nusing Orleans;\n\nnamespace Web"
},
{
"path": "Samples/OrleansApp/WebApp/Properties/AssemblyInfo.cs",
"chars": 1385,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/OrleansApp/WebApp/Startup.cs",
"chars": 1082,
"preview": "using System;\nusing System.Web.Http;\nusing Owin;\n\nnamespace WebApp\n{\n class Startup\n {\n // This code confi"
},
{
"path": "Samples/OrleansApp/WebApp/WebApp.csproj",
"chars": 10708,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/OrleansApp/WebApp/packages.config",
"chars": 2414,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.AspNet.WebApi.Client\" version=\"5.2.3\" target"
},
{
"path": "Samples/Samples.sln",
"chars": 1184,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 14\nVisualStudioVersion = 14.0.24720.0\nMini"
},
{
"path": "Samples/WebApp/PublishScripts/AzureWebsitePublishModule.psm1",
"chars": 31059,
"preview": "# AzureWebSitePublishModule.psm1 is a Windows PowerShell script module. This module exports Windows PowerShell functio"
},
{
"path": "Samples/WebApp/PublishScripts/Configurations/WebApp-WAWS-dev.json",
"chars": 465,
"preview": "{\n \"environmentSettings\": {\n \"webSite\": {\n \"name\": \"WebApp8882\",\n \"location\": \"East US\"\n"
},
{
"path": "Samples/WebApp/PublishScripts/Publish-WebApplicationWebsite.ps1",
"chars": 6581,
"preview": "#Requires -Version 3.0\n\n<#\n.SYNOPSIS\nCreates and deploys a Microsoft Azure Website for a Visual Studio web project.\nFor"
},
{
"path": "Samples/WebApp/WebApp/App.config",
"chars": 762,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".NE"
},
{
"path": "Samples/WebApp/WebApp/App.cs",
"chars": 2056,
"preview": "#region\n\nusing System;\nusing System.Linq;\nusing System.Net;\nusing System.Net.Sockets;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Samples/WebApp/WebApp/AppConfig.json",
"chars": 177,
"preview": "{\n \"ExeName\": \"WebApp.exe\",\n \"ExeArgs\": \"${Id} ${Version} ${ClusterId} ${InstanceId}\",\n \"GracefulShutdown\": true,\n "
},
{
"path": "Samples/WebApp/WebApp/ApplicationController.cs",
"chars": 600,
"preview": "using System.Threading.Tasks;\nusing System.Web.Http;\nusing Newtonsoft.Json.Linq;\n\nnamespace WebApp\n{\n [RoutePrefix(\""
},
{
"path": "Samples/WebApp/WebApp/CoinFlipController.cs",
"chars": 432,
"preview": "using System;\nusing System.Web.Http;\n\nnamespace WebApp\n{\n [RoutePrefix(\"coinflip\")]\n public class CoinFlipControl"
},
{
"path": "Samples/WebApp/WebApp/Properties/AssemblyInfo.cs",
"chars": 1385,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "Samples/WebApp/WebApp/Startup.cs",
"chars": 1003,
"preview": "using System;\nusing System.Web.Http;\nusing Owin;\n\nnamespace WebApp\n{\n class Startup\n {\n // This code confi"
},
{
"path": "Samples/WebApp/WebApp/WebApp.csproj",
"chars": 5920,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/WebApp/WebApp/packages.config",
"chars": 963,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"CommandLineParser\" version=\"1.9.71\" targetFramework=\"n"
},
{
"path": "Samples/WebApp/WebApp.sln",
"chars": 963,
"preview": "\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2013\nVisualStudioVersion = 12.0.31101.0\nMi"
},
{
"path": "Samples/YamsStudio/AddNewApplicationDialog.xaml",
"chars": 2005,
"preview": "<Window x:Class=\"YamsStudio.AddNewApplicationDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presen"
},
{
"path": "Samples/YamsStudio/AddNewApplicationDialog.xaml.cs",
"chars": 1410,
"preview": "using System;\nusing System.Windows;\nusing System.Windows.Forms;\n\nnamespace YamsStudio\n{\n /// <summary>\n /// Inter"
},
{
"path": "Samples/YamsStudio/AddNewDeploymentDialog.xaml",
"chars": 1801,
"preview": "<Window x:Class=\"YamsStudio.AddNewDeploymentDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/present"
},
{
"path": "Samples/YamsStudio/AddNewDeploymentDialog.xaml.cs",
"chars": 790,
"preview": "using System;\nusing System.Windows;\n\nnamespace YamsStudio\n{\n /// <summary>\n /// Interaction logic for AddNewDeplo"
},
{
"path": "Samples/YamsStudio/App.config",
"chars": 548,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <startup> \n <supportedRuntime version=\"v4.0\" sku=\".NE"
},
{
"path": "Samples/YamsStudio/App.xaml",
"chars": 363,
"preview": "<Application x:Class=\"YamsStudio.App\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Samples/YamsStudio/App.xaml.cs",
"chars": 324,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Configuration;\nusing System.Data;\nusing System.Linq;\nusing"
},
{
"path": "Samples/YamsStudio/BusyWindow.xaml",
"chars": 571,
"preview": "<Window x:Class=\"YamsStudio.BusyWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Samples/YamsStudio/BusyWindow.xaml.cs",
"chars": 511,
"preview": "using System.Windows;\n\nnamespace YamsStudio\n{\n /// <summary>\n /// Interaction logic for BusyWindow.xaml\n /// <"
},
{
"path": "Samples/YamsStudio/ConnectToStorageAccountDialog.xaml",
"chars": 1695,
"preview": "<Window x:Class=\"YamsStudio.ConnectToStorageAccountDialog \"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml"
},
{
"path": "Samples/YamsStudio/ConnectToStorageAccountDialog.xaml.cs",
"chars": 1083,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text;\nusing System.Threading.Tasks;\nusi"
},
{
"path": "Samples/YamsStudio/DeploymentInfo.cs",
"chars": 362,
"preview": "using Etg.Yams.Application;\n\nnamespace YamsStudio\n{\n public class DeploymentInfo\n {\n\t public DeploymentInfo(Ap"
},
{
"path": "Samples/YamsStudio/DeploymentRepositoryFactory.cs",
"chars": 738,
"preview": "// -------------------------------------------------------------------\n// Copyright (c) Microsoft Corporation. All Righ"
},
{
"path": "Samples/YamsStudio/DeploymentRepositoryManager.cs",
"chars": 1012,
"preview": "using System.Collections.Generic;\nusing Etg.Yams.Storage;\n\nnamespace YamsStudio\n{\n public class DeploymentRepository"
},
{
"path": "Samples/YamsStudio/IDeploymentRepositoryFactory.cs",
"chars": 185,
"preview": "using Etg.Yams.Storage;\n\nnamespace YamsStudio\n{\n public interface IDeploymentRepositoryFactory\n {\n IDeploy"
},
{
"path": "Samples/YamsStudio/MainWindow.xaml",
"chars": 10278,
"preview": "<Window x:Class=\"YamsStudio.MainWindow\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\"\n "
},
{
"path": "Samples/YamsStudio/MainWindow.xaml.cs",
"chars": 15746,
"preview": "using Etg.Yams.Application;\nusing Microsoft.WindowsAzure.Storage;\nusing System;\nusing System.Collections.Generic;\nusing"
},
{
"path": "Samples/YamsStudio/Properties/AssemblyInfo.cs",
"chars": 2376,
"preview": "using System.Reflection;\nusing System.Resources;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropSer"
},
{
"path": "Samples/YamsStudio/Properties/Resources.Designer.cs",
"chars": 2783,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Samples/YamsStudio/Properties/Resources.resx",
"chars": 5494,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n <!-- \n Microsoft ResX Schema \n \n Version 2.0\n \n The prim"
},
{
"path": "Samples/YamsStudio/Properties/Settings.Designer.cs",
"chars": 1065,
"preview": "//------------------------------------------------------------------------------\n// <auto-generated>\n// This code w"
},
{
"path": "Samples/YamsStudio/Properties/Settings.settings",
"chars": 193,
"preview": "<?xml version='1.0' encoding='utf-8'?>\n<SettingsFile xmlns=\"uri:settings\" CurrentProfile=\"(Default)\">\n <Profiles>\n "
},
{
"path": "Samples/YamsStudio/SelectDirectoryControl.xaml",
"chars": 846,
"preview": "<UserControl x:Class=\"YamsStudio.SelectDirectoryControl\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xa"
},
{
"path": "Samples/YamsStudio/SelectDirectoryControl.xaml.cs",
"chars": 837,
"preview": "using System.Windows;\nusing System.Windows.Forms;\n\nnamespace YamsStudio\n{\n /// <summary>\n /// Interaction logic f"
},
{
"path": "Samples/YamsStudio/StorageAccountConnectionInfo.cs",
"chars": 367,
"preview": "namespace YamsStudio\n{\n public class StorageAccountConnectionInfo\n {\n\t public StorageAccountConnectionInfo(str"
},
{
"path": "Samples/YamsStudio/UpdateVersionDialog.xaml",
"chars": 2490,
"preview": "<Window x:Class=\"YamsStudio.UpdateVersionDialog\"\n xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentati"
},
{
"path": "Samples/YamsStudio/UpdateVersionDialog.xaml.cs",
"chars": 1497,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Windows;\n\nnamespace YamsStudio\n{\n /// <summary>\n ///"
},
{
"path": "Samples/YamsStudio/YamsStudio.csproj",
"chars": 12132,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "Samples/YamsStudio/packages.config",
"chars": 1649,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Autofac\" version=\"3.5.2\" targetFramework=\"net461\" />\n "
},
{
"path": "src/AzureBlobStorageDeploymentRepository/AzureBlobStorageDeploymentRepository.csproj",
"chars": 5409,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/AzureBlobStorageDeploymentRepository/BlobStorageDeploymentRepository.cs",
"chars": 10296,
"preview": "using System.Diagnostics;\nusing System.Threading.Tasks;\nusing Etg.Yams.Application;\nusing Etg.Yams.Azure.Utils;\nusing E"
},
{
"path": "src/AzureBlobStorageDeploymentRepository/Properties/AssemblyInfo.cs",
"chars": 1445,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/AzureBlobStorageDeploymentRepository/app.config",
"chars": 273,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <runtime>\n <assemblyBinding xmlns=\"urn:schemas-microsoft-co"
},
{
"path": "src/AzureBlobStorageDeploymentRepository/packages.config",
"chars": 1389,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "src/AzureBlobStorageUpdateSession/AzureBlobStorageUpdateSession.csproj",
"chars": 6717,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/AzureBlobStorageUpdateSession/Properties/AssemblyInfo.cs",
"chars": 1431,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/AzureStorageUpdateSessionDiModule.cs",
"chars": 3262,
"preview": "using System;\nusing Autofac;\nusing Etg.Yams.Azure.UpdateSession.Retry;\nusing Etg.Yams.Update;\nusing Microsoft.Practices"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/AzureTableUpdateSessionManager.cs",
"chars": 4214,
"preview": "using System.Diagnostics;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Etg.Yams.Update;\n\nnamespace Etg.Yams.Az"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateBlob.cs",
"chars": 484,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateBlobFactory.cs",
"chars": 185,
"preview": "using System.Threading.Tasks;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public interface IUpdateBlobFactory\n {\n "
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/IUpdateSessionTable.cs",
"chars": 418,
"preview": "using System.Threading.Tasks;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public interface IUpdateSessionTable\n {\n "
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/Retry/LockUpdateBlobErrorDetectionStrategy.cs",
"chars": 355,
"preview": "using System;\nusing Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;\n\nnamespace Etg.Yams.Azure.UpdateSessio"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StartUpdateSessionRetryDecorator.cs",
"chars": 1289,
"preview": "using System;\nusing System.Threading.Tasks;\nusing Etg.Yams.Update;\n\nnamespace Etg.Yams.Azure.UpdateSession.Retry\n{\n p"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StorageExceptionErrorDetectionStrategy.cs",
"chars": 422,
"preview": "using System;\nusing System.Net;\nusing Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;\nusing Microsoft.Win"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/Retry/StorageExceptionUpdateSessionRetryDecorator.cs",
"chars": 1112,
"preview": "using System.Threading.Tasks;\nusing Etg.Yams.Update;\nusing Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/Retry/UpdateBlobFactoryRetryLockDecorator.cs",
"chars": 825,
"preview": "using System.Threading.Tasks;\nusing Microsoft.Practices.EnterpriseLibrary.TransientFaultHandling;\n\nnamespace Etg.Yams.Az"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlob.cs",
"chars": 4651,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Diagnostics;\nusing System.Linq;\nusing System.Net;\nusing Sy"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlobFactory.cs",
"chars": 1538,
"preview": "using System.Threading.Tasks;\nusing Etg.Yams.Azure.Lease;\nusing Etg.Yams.Azure.Utils;\nusing Microsoft.WindowsAzure.Stora"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateBlobUnavailableException.cs",
"chars": 129,
"preview": "using System;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public class UpdateBlobUnavailableException : Exception\n "
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateDomainEntity.cs",
"chars": 477,
"preview": "using Microsoft.WindowsAzure.Storage.Table;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public class UpdateDomainEntit"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionStatus.cs",
"chars": 662,
"preview": "using System.Collections.Generic;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public class UpdateSessionStatus\n {\n "
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionTable.cs",
"chars": 5735,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.Threading.Tasks;\nusing Microsoft.WindowsAzure.Storage;\nusin"
},
{
"path": "src/AzureBlobStorageUpdateSession/UpdateSession/UpdateSessionTransaction.cs",
"chars": 2235,
"preview": "using Microsoft.WindowsAzure.Storage.Table;\n\nnamespace Etg.Yams.Azure.UpdateSession\n{\n public class UpdateSessionTran"
},
{
"path": "src/AzureBlobStorageUpdateSession/packages.config",
"chars": 1154,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Autofac\" version=\"3.5.2\" targetFramework=\"net451\" />\n "
},
{
"path": "src/AzureBlobUtils/AzureBlobUtils.csproj",
"chars": 4600,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/AzureBlobUtils/BlobUtils.cs",
"chars": 5096,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\nusing Etg.Yams.Utils"
},
{
"path": "src/AzureBlobUtils/Properties/AssemblyInfo.cs",
"chars": 1401,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/AzureBlobUtils/packages.config",
"chars": 628,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "src/AzureUtils/AzureUtils.csproj",
"chars": 6410,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/AzureUtils/Lease/BlobLeaseFactory.cs",
"chars": 274,
"preview": "using Microsoft.WindowsAzure.Storage.Blob;\n\nnamespace Etg.Yams.Azure.Lease\n{\n public class BlobLeaseFactory : IBlobL"
},
{
"path": "src/AzureUtils/Lease/IBlobLease.cs",
"chars": 349,
"preview": "using System;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams.Azure.Lease\n{\n public interface IBlobLease : IDisposa"
},
{
"path": "src/AzureUtils/Lease/IBlobLeaseFactory.cs",
"chars": 180,
"preview": "using Microsoft.WindowsAzure.Storage.Blob;\n\nnamespace Etg.Yams.Azure.Lease\n{\n public interface IBlobLeaseFactory\n "
},
{
"path": "src/AzureUtils/Lease/SelfRenewableBlobLease.cs",
"chars": 3451,
"preview": "using System;\nusing System.Diagnostics;\nusing System.Reactive.Linq;\nusing System.Threading.Tasks;\nusing Microsoft.Windo"
},
{
"path": "src/AzureUtils/Properties/AssemblyInfo.cs",
"chars": 1393,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/AzureUtils/Utils/BlobUtils.cs",
"chars": 6298,
"preview": "using System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Security.Cryptography;\n"
},
{
"path": "src/AzureUtils/app.config",
"chars": 271,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <runtime>\n <assemblyBinding xmlns=\"urn:schemas-microsoft-com"
},
{
"path": "src/AzureUtils/packages.config",
"chars": 1492,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Microsoft.Azure.KeyVault.Core\" version=\"1.0.0\" targetF"
},
{
"path": "src/Common/Common.csproj",
"chars": 3085,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"14.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/Common/FileUtils.cs",
"chars": 2492,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams"
},
{
"path": "src/Common/Json/IJsonSerializer.cs",
"chars": 277,
"preview": "using System.Threading.Tasks;\n\nnamespace Etg.Yams.Json\n{\n public interface IJsonSerializer\n {\n string Seria"
},
{
"path": "src/Common/Json/JsonSerializer.cs",
"chars": 1069,
"preview": "using System.Threading.Tasks;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Serialization;\n\nnamespace Etg.Yams.Json\n{\n "
},
{
"path": "src/Common/Properties/AssemblyInfo.cs",
"chars": 1385,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/Common/Utils/DictionaryUtils.cs",
"chars": 356,
"preview": "using System.Collections.Generic;\nusing System.Linq;\n\nnamespace Etg.Yams.Utils\n{\n public static class DictionaryUtils"
},
{
"path": "src/Common/Utils/FileUtils.cs",
"chars": 2492,
"preview": "using System.Collections.Generic;\nusing System.IO;\nusing System.Linq;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams"
},
{
"path": "src/Common/Utils/HashCodeUtils.cs",
"chars": 447,
"preview": "using System.Collections;\n\nnamespace Etg.Yams.Utils\n{\n public static class HashCodeUtils\n {\n public static "
},
{
"path": "src/Common/Utils/TaskExtensions.cs",
"chars": 1290,
"preview": "using System;\nusing System.Threading;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams.Utils\n{\n public static class"
},
{
"path": "src/Common/Utils/TraceUtils.cs",
"chars": 421,
"preview": "using System;\nusing System.Diagnostics;\n\nnamespace Etg.Yams.Utils\n{\n public static class TraceUtils\n {\n pu"
},
{
"path": "src/Common/packages.config",
"chars": 138,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Newtonsoft.Json\" version=\"6.0.8\" targetFramework=\"net4"
},
{
"path": "src/Etg.Yams/Etg.Yams.csproj",
"chars": 5669,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"12.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.micros"
},
{
"path": "src/Etg.Yams/Etg.Yams.nuspec",
"chars": 728,
"preview": "<?xml version=\"1.0\"?>\n<package >\n <metadata>\n <id>Etg.Yams</id>\n <version>1.8.3</version>\n <title>YAMS</title>"
},
{
"path": "src/Etg.Yams/NuGetPack.bat",
"chars": 81,
"preview": "nuget pack Etg.Yams.csproj -IncludeReferencedProjects -Prop Configuration=Release"
},
{
"path": "src/Etg.Yams/Properties/AssemblyInfo.cs",
"chars": 1350,
"preview": "using System.Reflection;\nusing System.Runtime.InteropServices;\n\n// General Information about an assembly is controlled "
},
{
"path": "src/Etg.Yams/YamsServiceFactory.cs",
"chars": 994,
"preview": "using Etg.Yams.Azure.Storage;\nusing Etg.Yams.Azure.UpdateSession;\nusing Etg.Yams.Update;\n\nnamespace Etg.Yams\n{\n publ"
},
{
"path": "src/Etg.Yams/app.config",
"chars": 273,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n <runtime>\n <assemblyBinding xmlns=\"urn:schemas-microsoft-co"
},
{
"path": "src/Etg.Yams/packages.config",
"chars": 1048,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"Autofac\" version=\"3.5.2\" targetFramework=\"net451\" />\n "
},
{
"path": "src/Etg.Yams.Client/Etg.Yams.Client.csproj",
"chars": 3281,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbui"
},
{
"path": "src/Etg.Yams.Client/Etg.Yams.Client.nuspec",
"chars": 620,
"preview": "<?xml version=\"1.0\"?>\n<package >\n <metadata>\n <id>Etg.Yams.Client</id>\n <version>1.1.0</version>\n <title>YAMS "
},
{
"path": "src/Etg.Yams.Client/IProcessArgsParser.cs",
"chars": 133,
"preview": "namespace Etg.Yams.Client\n{\n public interface IProcessArgsParser\n {\n YamsClientOptions ParseArgs(string[] a"
},
{
"path": "src/Etg.Yams.Client/IYamsClient.cs",
"chars": 282,
"preview": "using System;\nusing System.Threading.Tasks;\n\nnamespace Etg.Yams.Client\n{\n public interface IYamsClient : IDisposable"
},
{
"path": "src/Etg.Yams.Client/IYamsClientFactory.cs",
"chars": 145,
"preview": "namespace Etg.Yams.Client\n{\n public interface IYamsClientFactory\n {\n IYamsClient CreateYamsClient(YamsClie"
},
{
"path": "src/Etg.Yams.Client/NuGetPack.bat",
"chars": 88,
"preview": "nuget pack Etg.Yams.Client.csproj -IncludeReferencedProjects -Prop Configuration=Release"
},
{
"path": "src/Etg.Yams.Client/ProcessArgsParser.cs",
"chars": 332,
"preview": "using CommandLine;\n\nnamespace Etg.Yams.Client\n{\n public class ProcessArgsParser : IProcessArgsParser\n {\n pu"
},
{
"path": "src/Etg.Yams.Client/Properties/AssemblyInfo.cs",
"chars": 1398,
"preview": "using System.Reflection;\nusing System.Runtime.CompilerServices;\nusing System.Runtime.InteropServices;\n\n// General Infor"
},
{
"path": "src/Etg.Yams.Client/YamsClient.cs",
"chars": 4628,
"preview": "using Etg.Yams.Ipc;\nusing Etg.Yams.Utils;\nusing System;\nusing System.Diagnostics;\nusing System.Threading.Tasks;\n\nnamesp"
},
{
"path": "src/Etg.Yams.Client/YamsClientConfig.cs",
"chars": 688,
"preview": "using System;\n\nnamespace Etg.Yams.Client\n{\n public class YamsClientConfig\n {\n public YamsClientConfig(TimeS"
},
{
"path": "src/Etg.Yams.Client/YamsClientConfigBuilder.cs",
"chars": 1205,
"preview": "using System;\n\nnamespace Etg.Yams.Client\n{\n public class YamsClientConfigBuilder\n {\n private readonly strin"
},
{
"path": "src/Etg.Yams.Client/YamsClientFactory.cs",
"chars": 1465,
"preview": "using System;\nusing CommandLine;\nusing Etg.Yams.Ipc;\n\nnamespace Etg.Yams.Client\n{\n public class YamsClientFactory : I"
},
{
"path": "src/Etg.Yams.Client/YamsClientOptions.cs",
"chars": 441,
"preview": "using CommandLine;\n\nnamespace Etg.Yams.Client\n{\n public class YamsClientOptions\n {\n [Option()]\n publ"
},
{
"path": "src/Etg.Yams.Client/packages.config",
"chars": 141,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n <package id=\"CommandLineParser\" version=\"1.9.71\" targetFramework=\"n"
}
]
// ... and 210 more files (download for full content)
About this extraction
This page contains the full source code of the Microsoft/Yams GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 410 files (972.2 KB), approximately 246.4k tokens, and a symbol index with 1041 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.