Ejemplo n.º 1
0
        internal DataSet(Xid id, Variant variant)
        {
            Id = id;
            Variant = variant;
            Cache = Variant.Cache;

            // Check dataset is defined in database
            using (var query = new DatabaseQuery(DatabaseQueryString.Create("DataSetCheck")) { Type = CommandType.StoredProcedure }) {
                query.Bind("dataSetId", Id.ToGuid());
                query.BindOutput("exists", SqlDbType.Int);
                query.Execute();
            }
        }
Ejemplo n.º 2
0
        public Guid LogException(Exception ex, string environment, Xid requestingNodeId)
        {
            // Get session details
            var sessionId = new Xid();
            string clientIp = null;
            if (null != HttpContext.Current) {
                if (null != HttpContext.Current.Session && !string.IsNullOrEmpty(HttpContext.Current.Session.SessionID)) {
                    //Wrong SID sessionId = HttpContext.Current.Session.SessionID;
                }
                if (null != HttpContext.Current.Request) {
                    clientIp = HttpContext.Current.Request.UserHostAddress;
                }
            }

            // Log inner exception
            Guid? innerExceptionId = null == ex.InnerException ? null : (Guid?)LogException(ex.InnerException, environment, requestingNodeId);

            using (var query = new DatabaseQuery(DatabaseQueryString.Create("ExceptionLog2")) { Type = System.Data.CommandType.StoredProcedure }) {
                query.Parameters.Add(new SqlParameter("dataSetId", DataSetId.ToGuid()));
                query.Parameters.Add(new SqlParameter("environment", environment ?? "<null>"));
                query.Parameters.Add(new SqlParameter("message", ex.Message.Substr(0, 1024)));
                var data = "";
                if (null != ex.Data) {
                    data = ex.Data.ToString().Substr(0, 1024);
                }
                query.Parameters.Add(new SqlParameter("data", data));
                query.Parameters.Add(new SqlParameter("sourceSite", ex.Source));
                query.Parameters.Add(new SqlParameter("stackTrace", ex.StackTrace.ToString()));
                if (null == innerExceptionId) {
                    query.Parameters.Add(new SqlParameter("innerException", DBNull.Value));
                } else {
                    query.Parameters.Add(new SqlParameter("innerException", innerExceptionId));
                }
                query.Parameters.Add(new SqlParameter("caught", false));
                query.Parameters.Add(new SqlParameter("clientIp", clientIp ?? "<null>"));
                query.Parameters.Add(new SqlParameter("sessionId", sessionId.ToGuid()));
                query.Parameters.Add(new SqlParameter("requestingNodeId", requestingNodeId.ToGuid()));

                query.Parameters.Add(new SqlParameter("id", System.Data.SqlDbType.UniqueIdentifier) { Direction = System.Data.ParameterDirection.Output });
                query.Execute();

                return (Guid)query.Parameters["id"].Value;
            }
        }
Ejemplo n.º 3
0
        public void ProcessRequest(HttpContext context)
        {
            if (null == context) {
                throw new ArgumentNullException("context");
            }

            // Start timing
            var stopwatch = new Stopwatch();
            stopwatch.Start();

            try {
                ProcessRequestInner(context, context.Request, context.Response);
            } catch (ThreadAbortException) { } catch (Exception ex) {
                var id = LogException(ex, "ProcessRequest", Ids.System);
                context.Response.SendFailure(HttpStatusCode.InternalServerError, "Unexpected issue. Logged as " + id.ToString());

                // Okay, this is pretty major, let it hit the surface.
                throw;
            } finally {
                // Stop timing
                stopwatch.Stop();

                // Create session in database
                var sessionId = new Xid();
                using (var query = new DatabaseQuery(DatabaseQueryString.Create("RequestLog")) { Type = System.Data.CommandType.StoredProcedure }) {
                    query.Parameters.Add(new SqlParameter("dataSetId", DataSetId.ToGuid()));
                    query.Parameters.Add(new SqlParameter("ip", context.Request.UserHostAddress ?? ""));
                    query.Parameters.Add(new SqlParameter("referrer", null == context.Request.UrlReferrer ? "" : context.Request.UrlReferrer.AbsoluteUri));
                    query.Parameters.Add(new SqlParameter("userAgent", context.Request.UserAgent ?? ""));
                    string langs = null;
                    if (null != context.Request.UserLanguages) {
                        langs = Json.Serialize(context.Request.UserLanguages);
                    }
                    if (null == langs) {
                        langs = "";
                    }
                    query.Parameters.Add(new SqlParameter("languages", langs));

                    query.Parameters.Add(new SqlParameter("path", null == context.Request.Path ? "" : context.Request.Path));
                    query.Parameters.Add(new SqlParameter("sessionId", sessionId.ToGuid()));
                    query.Parameters.Add(new SqlParameter("processingTime", stopwatch.ElapsedMilliseconds));

                    query.Parameters.Add(new SqlParameter("id", System.Data.SqlDbType.UniqueIdentifier) { Direction = System.Data.ParameterDirection.Output });
                    query.Execute();
                }
            }
        }
Ejemplo n.º 4
0
        public GenericNode SystemCreateNode(Xid domainId, Xid nodeTypeId, Xid requestingNodeId)
        {
            // Ask server to create node
            Xid nodeId;
            using (var query = new DatabaseQuery(DatabaseQueryString.Create("NodeCreate")) { Type = CommandType.StoredProcedure }) {
                query.Bind("domainId", domainId.ToGuid());
                query.Bind("typeId", nodeTypeId.ToGuid());
                query.Bind("requestingNodeId", requestingNodeId.ToGuid());
                query.BindOutput("id", SqlDbType.UniqueIdentifier);
                query.Execute();
                nodeId = new Xid((Guid)query.Parameters["id"].Value);
            }

            // Preseed cache - BONUS PERFORMANCE
            Variant.Cache.Set("node-" + Id.ToString(), new NRecordLoader(nodeId, domainId, nodeTypeId, Id), Variant.GetCacheStoragePolicy());

            // Return node
            return GetNode(nodeId, requestingNodeId, MaxAge.Any);
        }
Ejemplo n.º 5
0
 public Xid SystemCreateDomain(Xid requestingNodeId)
 {
     // Ask server to create node
     Xid domainId;
     using (var query = new DatabaseQuery(DatabaseQueryString.Create("DomainCreate")) { Type = CommandType.StoredProcedure }) {
         query.Bind("dataSetId", Id.ToGuid());
         query.Bind("requestingNodeId", requestingNodeId.ToGuid());
         query.BindOutput("id", SqlDbType.UniqueIdentifier);
         query.Execute();
         domainId = new Xid((Guid)query.Parameters["id"].Value);
     }
     return domainId;
 }
Ejemplo n.º 6
0
        public GenericAsset SystemCreateAsset(Stream inputStream, string fileName, string contentType, Xid domainId, Xid requestingNodeId, Xid? derivedFromId = null)
        {
            // Generate key
            var key = Token.Generate().ToString();

            // Ask server to create asset
            Xid assetId;
            using (var query = new DatabaseQuery(DatabaseQueryString.Create("AssetCreate")) { Type = CommandType.StoredProcedure }) {
                query.Bind("domainId", domainId.ToGuid());
                query.Bind("fileName", fileName);
                query.Bind("contentType", contentType);
                query.Bind("length", inputStream.Length);
                if (derivedFromId.HasValue) {
                    query.Bind("derivedFrom", derivedFromId.Value.ToGuid());
                } else {
                    query.Bind("derivedFrom", DBNull.Value);
                }
                query.Bind("key", key);
                query.Bind("requestingNodeId", requestingNodeId.ToGuid());
                query.BindOutput("id", SqlDbType.UniqueIdentifier);
                query.Execute();
                assetId = new Xid((Guid)query.Parameters["id"].Value);
            }

            // Create arecord
            var record = new ARecordLoader(assetId, domainId, fileName, contentType, inputStream.Length, derivedFromId, key);

            // Upload blob
            Variant.BlobContainer.Get(record.Key).Put(inputStream, fileName, contentType, -1);

            // Preseed cache - BONUS PERFORMANCE
            Variant.Cache.Set("asset-" + Id.ToString(), record, Variant.GetCacheStoragePolicy());

            return GetAsset(assetId, requestingNodeId, MaxAge.Any);
        }
Ejemplo n.º 7
0
 internal static Session Create(HttpRequest request, Variant variant, IEnvelopeHandler envelopeHandler)
 {
     // Create session in database
     Xid id;
     using (var query = new DatabaseQuery(DatabaseQueryString.Create("SessionStartLog")) { Type = System.Data.CommandType.StoredProcedure }) {
         query.Parameters.Add(new SqlParameter("dataSetId", variant.DataSetId.ToGuid()));
         query.Parameters.Add(new SqlParameter("ip", request.UserHostAddress ?? ""));
         query.Parameters.Add(new SqlParameter("referrer", null == request.UrlReferrer ? "" : request.UrlReferrer.AbsoluteUri));
         query.Parameters.Add(new SqlParameter("userAgent", request.UserAgent ?? ""));
         query.Parameters.Add(new SqlParameter("languages", null == request.UserLanguages ? "" : Json.Serialize(request.UserLanguages)));
         query.Parameters.Add(new SqlParameter("id", System.Data.SqlDbType.UniqueIdentifier) { Direction = System.Data.ParameterDirection.Output });
         query.Execute();
         id = (Xid)(Guid)query.Parameters["id"].Value;
     }
     return StoreDatabase[id] = new Session(id, variant, envelopeHandler);
 }