OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
BaseRequestHandler.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using OpenSim.Framework.Monitoring;
30 
31 namespace OpenSim.Framework.Servers.HttpServer
32 {
33  public abstract class BaseRequestHandler
34  {
35  public int RequestsReceived { get; protected set; }
36 
37  public int RequestsHandled { get; protected set; }
38 
39  public virtual string ContentType
40  {
41  get { return "application/xml"; }
42  }
43 
44  private readonly string m_httpMethod;
45 
46  public virtual string HttpMethod
47  {
48  get { return m_httpMethod; }
49  }
50 
51  private readonly string m_path;
52 
53  public string Name { get; private set; }
54 
55  public string Description { get; private set; }
56 
57  protected BaseRequestHandler(string httpMethod, string path) : this(httpMethod, path, null, null) {}
58 
59  protected BaseRequestHandler(string httpMethod, string path, string name, string description)
60  {
61  Name = name;
62  Description = description;
63  m_httpMethod = httpMethod;
64  m_path = path;
65 
66  // FIXME: A very temporary measure to stop the simulator stats being overwhelmed with user CAPS info.
67  // Needs to be fixed properly in stats display
68  if (!path.StartsWith("/CAPS/"))
69  {
70  StatsManager.RegisterStat(
71  new Stat(
72  "requests",
73  "requests",
74  "Number of requests received by this service endpoint",
75  "requests",
76  "service",
77  string.Format("{0}:{1}", httpMethod, path),
78  StatType.Pull,
79  MeasuresOfInterest.AverageChangeOverTime,
80  s => s.Value = RequestsReceived,
81  StatVerbosity.Debug));
82  }
83  }
84 
85  public virtual string Path
86  {
87  get { return m_path; }
88  }
89 
90  public string GetParam(string path)
91  {
92  if (CheckParam(path))
93  {
94  return path.Substring(m_path.Length);
95  }
96 
97  return String.Empty;
98  }
99 
100  protected bool CheckParam(string path)
101  {
102  if (String.IsNullOrEmpty(path))
103  {
104  return false;
105  }
106 
107  return path.StartsWith(Path);
108  }
109 
110  public string[] SplitParams(string path)
111  {
112  string param = GetParam(path);
113 
114  return param.Split(new char[] { '/', '?', '&' }, StringSplitOptions.RemoveEmptyEntries);
115  }
116  }
117 }
BaseRequestHandler(string httpMethod, string path, string name, string description)
Holds individual statistic details
Definition: Stat.cs:41
StatVerbosity
Verbosity of stat.
MeasuresOfInterest
Measures of interest for this stat.