| <%@ ServiceHost Language="C#" Debug="true" Factory="System.ServiceModel.Activation.WebScriptServiceHostFactory" |
| Service="DataJS.Tests.Instrument" %> |
| |
| // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. |
| // 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. |
| |
| namespace DataJS.Tests |
| { |
| using System; |
| using System.Collections.Generic; |
| using System.Diagnostics; |
| using System.IO; |
| using System.Linq; |
| using System.Runtime.Serialization; |
| using System.ServiceModel; |
| using System.ServiceModel.Activation; |
| using System.ServiceModel.Syndication; |
| using System.ServiceModel.Web; |
| using System.Text; |
| |
| /// <summary> |
| /// Instrumentation utilities |
| /// </summary> |
| [ServiceContract] |
| [ServiceBehavior(IncludeExceptionDetailInFaults = true)] |
| [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] |
| public class Instrument |
| { |
| static readonly Dictionary<string, string> userAgents = new Dictionary<string,string> |
| { |
| { "MSIE", "iexplore" }, |
| { "Firefox", "firefox" }, |
| { "Chrome", "chrome" }, |
| { "Safari", "safari" } |
| }; |
| |
| /// <summary> |
| /// Gets the memory size used by the browser |
| /// </summary> |
| /// <returns>The memory size used by the browser (in bytes), or zero if browser is not supported</returns> |
| [OperationContract] |
| [WebGet] |
| public Stream GetBrowserMemorySize() |
| { |
| string userAgentString = WebOperationContext.Current.IncomingRequest.UserAgent; |
| string userAgentKey = Instrument.userAgents.Keys.FirstOrDefault(ua => userAgentString.Contains(ua)); |
| |
| if (userAgentKey != null) |
| { |
| string processName = userAgents[userAgentKey]; |
| long totalMemory = Process.GetProcessesByName(processName).Select(p => p.WorkingSet64).Sum(); |
| |
| return new MemoryStream(Encoding.UTF8.GetBytes(totalMemory.ToString())); |
| } |
| else |
| { |
| return new MemoryStream(Encoding.UTF8.GetBytes("0")); |
| } |
| } |
| } |
| } |