/// <summary> /// Logs data to server. /// </summary> /// <returns>A response object that contains response string and response type that are set by server.</returns> /// <param name="data">JSON string data.</param> /// <param name="isMessage">Flag data as message.</param> /// <value>Logs data to server. Internally, LogData calls functions to log json data or string message. Depending on type of data the input data are sent to different URIs.</value> public ResponseObject LogData( string data, bool isMessage = false ) { ResponseObject R = new ResponseObject(); string uri = ""; if ( isMessage == false ) { uri = "http://skylr.renci.org/api/data/document/add"; R = ( LogEvent (uri, data) ); } else if ( isMessage == true ) { uri = "http://skylr.renci.org/api/data/messageQ/add"; R = ( LogMessage (uri, data) ); } return R; }
/// <summary> /// Logs the input binary data. /// </summary> /// <param name="url">URL.</param> /// <param name="filePath">Location of file on computer.</param> /// <param name="paramName">Parameter name.</param> /// <param name="contentType">Content type.</param> /// <param name="data">Data.</param> // <returns>A response object that contains response string and response type that are set by server.</returns> protected ResponseObject LogFileData( string url, string filePath, string paramName, string contentType, string data ) { string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); // Set up an instance of Http Web Request HttpWebRequest request = (HttpWebRequest)WebRequest.Create (url); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Set attributes of the HTTP web request object // Request Method request.Method = WebRequestMethods.Http.Post; // Request Content Type request.ContentType = "multipart/form-data; boundary=" + boundary; // Request keep alive flag request.KeepAlive = true; // Request credentials request.Credentials = System.Net.CredentialCache.DefaultCredentials; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Declare request stream and write to it Stream dataStream = request.GetRequestStream(); // Check if data stream is null if (dataStream == null) { ResponseObject RFail = new ResponseObject (); switch (ResponseDensity) { case 1: RFail.Response = " "; break; case 2: case 3: case 4: case 5: RFail.Response = "[DataLogger] Error (stream could not be initialized).\n"; break; } RFail.Type = (int)ResponseObject.ResponseType.ERROR; return RFail; } // Write out boundary bytes byte[] boundarybytes = System.Text.Encoding.ASCII.GetBytes ("\r\n--" + boundary + "\r\n"); dataStream.Write(boundarybytes, 0, boundarybytes.Length); // Write out header bytes string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: {2}\r\n\r\n"; string header = string.Format (headerTemplate, paramName, filePath, contentType); byte[] headerbytes = System.Text.Encoding.UTF8.GetBytes (header); dataStream.Write(headerbytes, 0, headerbytes.Length); // Write out file data FileStream fileStream = new FileStream (filePath, FileMode.Open, FileAccess.Read); byte[] byteArray = new byte[4096]; int bytesRead = 0; while ((bytesRead = fileStream.Read (byteArray, 0, byteArray.Length)) != 0) { dataStream.Write (byteArray, 0, bytesRead); } fileStream.Close(); // Write out tail bytes byte[] trailer = System.Text.Encoding.ASCII.GetBytes ("\r\n--" + boundary + "--\r\n"); dataStream.Write (trailer, 0, trailer.Length); dataStream.Close (); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Get response from server ResponseObject R = new ResponseObject (); try { using (WebResponse response = request.GetResponse ()) { HttpWebResponse _resp = (HttpWebResponse)response; if (_resp.StatusCode == HttpStatusCode.OK) { switch (ResponseDensity) { case 1: R.Response = " "; break; case 2: R.Response = " " + _resp.StatusCode + "\n"; break; case 3: case 4: case 5: R.Response = "[DataLogger] Server response: " + byteArray.Length + " bytes sent.\n"; break; } R.Type = (int)ResponseObject.ResponseType.NOTICE; _resp.Close (); } } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse _resp = (HttpWebResponse)response; using (Stream _data = _resp.GetResponseStream ()) { string _text = new StreamReader(_data).ReadToEnd(); _resp.Close(); switch (ResponseDensity) { case 1: R.Response = " "; break; case 2: R.Response = " " + _resp.StatusCode + "\n"; break; case 3: case 4: case 5: R.Response = "[DataLogger] Return code: " + _resp.StatusCode + " while sending data. Data size: " + data.Length + " Server Response: " + _text + "\n"; break; } R.Type = (int)ResponseObject.ResponseType.ERROR; } } } finally { request = null; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// return R; }
/// <summary> /// Logs the input message data. /// </summary> /// <param name="uri">URI.</param> /// <param name="data">Data.</param> /// <returns>A response object that contains response string and response type that are set by server.</returns> protected ResponseObject LogMessage( string uri, string data ) { // Set up an instance of Http Web Request HttpWebRequest request = (HttpWebRequest)WebRequest.Create (uri); // Set up array to hold data byte[] byteArray = Encoding.UTF8.GetBytes ((string)data); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Set attributes of the HTTP web request object // Request Method request.Method = WebRequestMethods.Http.Post; // Content Type request.ContentType = "text/html"; // Content length proprty request.ContentLength = byteArray.Length; //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Declare request stream and write to it Stream dataStream = request.GetRequestStream (); // Check if data stream is null if (dataStream == null) { ResponseObject RFail = new ResponseObject(); switch(ResponseDensity) { case 1: RFail.Response = " "; break; case 2: case 3: case 4: case 5: RFail.Response = "[DataLogger] Error (stream could not be initialized).\n"; break; } RFail.Type = (int)ResponseObject.ResponseType.ERROR; return RFail; } // Write data to the request stream and close it dataStream.Write (byteArray, 0, byteArray.Length); dataStream.Close (); //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// // Get response from server ResponseObject R = new ResponseObject (); try { using (WebResponse response = request.GetResponse ()) { HttpWebResponse _resp = (HttpWebResponse)response; if(_resp.StatusCode == HttpStatusCode.OK) { switch (ResponseDensity) { case 1: R.Response = " "; break; case 2: R.Response = " " + _resp.StatusCode + "\n"; break; case 3: case 4: case 5: R.Response = "[DataLogger] Server response: " + byteArray.Length + " bytes sent.\n"; break; } R.Type = (int)ResponseObject.ResponseType.NOTICE; _resp.Close(); } } } catch (WebException e) { using (WebResponse response = e.Response) { HttpWebResponse _resp = (HttpWebResponse)response; using (Stream _data = _resp.GetResponseStream ()) { string _text = new StreamReader(_data).ReadToEnd(); _resp.Close(); switch (ResponseDensity) { case 1: R.Response = " "; break; case 2: R.Response = " " + _resp.StatusCode + "\n"; break; case 3: case 4: case 5: R.Response = "[DataLogger] Return code: " + _resp.StatusCode + " while sending data. Data size: " + data.Length + " Server Response: " + _text + "\n"; break; } R.Type = (int)ResponseObject.ResponseType.ERROR; } } } finally { request = null; } //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=// return R; }
/// <summary> /// Logs a file to server. /// </summary> /// <returns>A response object that contains response string and response type that are set by server.</returns> /// <param name="data">JSON string data.</param> /// <param name="filePath">Path of file to be uploaded.</param> /// <value>Logs data to server. Internally, LogData calls functions to log json data or string message. Depending on type of data the input data are sent to different URIs.</value> public ResponseObject LogFile( string data, string filePath ) { ResponseObject R = new ResponseObject(); string contentType = "text/html"; string paramName = "file"; string uri = "http://skylr.renci.org/api/data/file/add"; R = ( LogFileData (uri, filePath, paramName, contentType, data) ); return R; }