public static void MetricForResponseSize(this INancyModule module, string metricName, Predicate<RouteDescription> routePredicate)
        {
            var name = string.Format("{0}.{1}", module.GetType().Name, metricName);
            CheckNancyMetricsIsConfigured();
            var histogram = NancyMetrics.CurrentConfig.Registry.Histogram(name, Unit.Custom("bytes"), SamplingType.FavourRecent);

            module.After.AddItemToEndOfPipeline(ctx =>
            {
                if (routePredicate(ctx.ResolvedRoute.Description))
                {
                    string lengthHeader;
                    // if available use content length header
                    if (ctx.Response.Headers.TryGetValue("Content-Length", out lengthHeader))
                    {
                        long length;
                        if (long.TryParse(lengthHeader, out length))
                        {
                            histogram.Update(length);
                        }
                    }
                    else
                    {
                        // if no content length - get the length of the stream
                        // this might be suboptimal for some types of requests
                        using (var ns = new NullStream())
                        {
                            ctx.Response.Contents(ns);
                            histogram.Update(ns.Length);
                        }
                    }
                }
            });
        }
예제 #2
0
        public Engine()
        {
            var options = new Dictionary<string, object>();
            options["DivisionOptions"] = PythonDivisionOptions.New;
            _history = new NullStream();
            _output = new EventRaisingStreamWriter(_history);
            _output.StringWritten += _output_StringWritten;
            _engine = Python.CreateEngine(options);
            _engine.Runtime.IO.SetOutput(_history, _output);
            _engine.Runtime.IO.SetErrorOutput(_history, _output);
            _scope = _engine.CreateScope();
            foreach (var t in _pluggable)
            {
                _scope.SetVariable(t.Name, DynamicHelpers.GetPythonTypeFromType(t));
            }
            _scope.SetVariable("CalculatorFunctions", DynamicHelpers.GetPythonTypeFromType(typeof(CalculatorFunctions)));
            _functioncache = new Dictionary<string, string>();
            //hidden functions
            _functioncache.Add("Var", "CalculatorFunctions.Var");
            _functioncache.Add("FncList", "CalculatorFunctions.FncList");
            _functioncache.Add("RegFunction", "CalculatorFunctions.RegFunction");

            foreach (var f in _functions)
            {
                if (_functioncache.ContainsKey(f.Name)) continue;
                _functioncache.Add(f.Name, f.FullName);
            }
            LoadBitops();
        }
예제 #3
0
        private void CheckAndSetContentLength(Response response)
        {
            if (this.Headers.ContainsKey(ContentLength))
            {
                return;
            }

            using (var nullStream = new NullStream())
            {
                response.Contents.Invoke(nullStream);

                this.Headers[ContentLength] = nullStream.Length.ToString(CultureInfo.InvariantCulture);
            }

        }
예제 #4
0
		static byte[] GetHash(string fullPath) {
			try {
				using (var hasher = MD5.Create()) {
					using (var outStream = new NullStream()) {
						using (var csStream = new CryptoStream(outStream, hasher, CryptoStreamMode.Write))
							new BinaryWriter(csStream).Write(File.ReadAllBytes(fullPath));
					}
					return hasher.Hash;
				}
			}
			catch {
			}
			return null;
		}
예제 #5
0
 protected virtual long MeasureOverride()
 {
     var nullStream = new NullStream();
     var streamLimiter = new StreamLimiter(nullStream);
     Serialize(streamLimiter, null);
     return streamLimiter.RelativePosition;
 }
예제 #6
0
 protected virtual void Dispose(bool native)
 {
     if (_output != null)
     {
         _output.Dispose();
         _output = null;
     }
     if (_history != null)
     {
         _history.Dispose();
         _history = null;
     }
 }
		static byte[] GetHash(string fullPath) {
			try {
				using (var reader = new BinaryReader(new FileStream(fullPath, FileMode.Open, FileAccess.Read, FileShare.Read))) {
					reader.BaseStream.Position = HASH_FILE_OFFSET;
					var bytes = reader.ReadBytes(HASH_SIZE);
					if (bytes.Length != HASH_SIZE)
						return null;

					using (var hasher = MD5.Create()) {
						using (var outStream = new NullStream()) {
							using (var csStream = new CryptoStream(outStream, hasher, CryptoStreamMode.Write))
								new BinaryWriter(csStream).Write(bytes);
						}
						return hasher.Hash;
					}
				}
			}
			catch {
			}
			return null;
		}
예제 #8
0
        /* ----------------------------------------------------------------- */
        ///
        /// SaveWithJpegQuality
        /// 
        /// <summary>
        /// JPEG の画質を指定して保存する.JPEG の画質は設定画面の内容に
        /// 従って決定する.
        /// </summary>
        ///
        /* ----------------------------------------------------------------- */
        private void SaveWithJpegQuality(Image image, string dest)
        {
            ImageCodecInfo jpegEncoder = null;
            foreach (ImageCodecInfo enc in ImageCodecInfo.GetImageEncoders())
            {
                if (enc.FormatID == ImageFormat.Jpeg.Guid)
                {
                    jpegEncoder = enc;
                    break;
                }
            }

            Int64 jpgqual = 0;

            if (radio_filesize.Checked)
            {
                Int64 min = 0, max = 101;
                for (int i = 0; i < 7; ++i)
                {
                    Int64 mid = (max + min) / 2;
                    NullStream ns = new NullStream();
                    EncoderParameters ep = new EncoderParameters(1);
                    EncoderParameter testqual = new EncoderParameter(Encoder.Quality, mid);
                    ep.Param[0] = testqual;

                    image.Save(ns, jpegEncoder, ep);

                    if (ns.Length <= numeric_filesize.Value * 1024)
                        min = mid;
                    else
                        max = mid;
                }
                jpgqual = min;
            }
            else
            {
                jpgqual = (Int64)numeric_quality.Value;
            }

            EncoderParameters encParams = new EncoderParameters(1);
            EncoderParameter quality = new EncoderParameter(Encoder.Quality, jpgqual);
            encParams.Param[0] = quality;

            image.Save(dest, jpegEncoder, encParams);
        }