public async Task <IActionResult> Post(VideoDataModel response) { // rujtja json //ProcessedDataModel pdm = new ProcessedDataModel(response.Title,response.Description,response.VideoPath.FileName); var currentFile = System.IO.File.ReadAllText("./Data/information.json"); var resultList = JsonConvert.DeserializeObject <List <ProcessedDataModel> >(currentFile); int id; if (resultList.Count != 0) { id = Convert.ToInt32(resultList[resultList.Count - 1].id) + 1; } else { id = 1; } var filePath = String.Format("./wwwroot/videos/{0}.mp4", id); using (var stream = System.IO.File.Create(filePath)) { await response.VideoPath.CopyToAsync(stream); } string dir = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location).Split("bin")[0]; string videoPath = string.Format("{0}wwwroot\\videos\\{1}.mp4", dir, id.ToString()); IMediaInfo mediaInfo = await FFmpeg.GetMediaInfo(videoPath); int videoDuration = (int)Math.Floor(mediaInfo.Duration.TotalSeconds); ProcessedDataModel pdm = new ProcessedDataModel(id, response.Title, response.Description, response.Category, filePath, videoDuration); resultList.Add(pdm); var convertedJson = JsonConvert.SerializeObject(resultList, Formatting.Indented); System.IO.File.WriteAllText("./Data/information.json", convertedJson); // rujta e file //System.IO.File.Copy(response.VideoPath, "./wwwroot/videos/" + resultList.Count + ".mp4",true); Extraction.extractThumbnailAsync(id); Extraction.extractFrames(id); return(RedirectToAction(nameof(AdminPage), response)); }
void ProcessDataByPIServer(string piServerName) { while (true) { try { double utcConversionTime = GetAndTimezone(); //To Do get connection basis of PI server using Connection Manager SqlConnection piConnection = ConnectionManager.Instance().GetPISQLConnection(piServerName); ConnectionManager.Instance().OpenSQLConnection(piConnection); Console.WriteLine("Pi SQL Connection Opened"); SqlConnection weatherConnection = ConnectionManager.Instance().GetPISQLConnection(piServerName); ConnectionManager.Instance().OpenSQLConnection(weatherConnection); //We need this meterlist, bcoz we going to process data meter by meter List <string> meterList = new List <string>(); meterList = getMeterList(piServerName); ProcessedDataModel processedDataInfo = BlobStorageManager.Instance().GetLastProcessedData <ProcessedDataModel>(piServerName, Constants.THRESHOLD_METER_STORAGE_FILENAME_PREFIX); if (processedDataInfo == null) { processedDataInfo = new ProcessedDataModel { MeterTimestamp = new Dictionary <string, DateTime>() } } ; Dictionary <string, DateTime> meterTimestamp = processedDataInfo.MeterTimestamp; //Todo need to add validation here at timestamp whether it is null or not, if it is null then have to add default value meterList.All(meter => { if (!meterTimestamp.ContainsKey(meter)) { SqlConnection meterFirstEntryConn = ConnectionManager.Instance().GetPISQLConnection(piServerName); ConnectionManager.Instance().OpenSQLConnection(meterFirstEntryConn); SqlCommand getTimestamp = new SqlCommand("SELECT TOP 1 Timestamp FROM PowergridView WHERE PowerScout = @meter order by Timestamp", meterFirstEntryConn); getTimestamp.Parameters.Add(new SqlParameter("meter", meter)); SqlDataReader result = getTimestamp.ExecuteReader(); while (result.Read()) //Runs only once { DateTime updatedTime = Utility.TrimDateToMinute(((DateTime)result[0]).AddMinutes(-1)); meterTimestamp.Add(meter, Convert.ToDateTime(updatedTime)); } ConnectionManager.Instance().CloseSQLConnection(meterFirstEntryConn); } //This is bcoz we are saving value in threshold file with addition of utcconversion time in pidb time.So this condition should be basedon pi time DateTime startTime = Utility.TrimDateToMinute(meterTimestamp[meter]); DateTime endTime = startTime.AddMinutes(Constants.TIME_WINDOW_FOR_HALF_HOURLY_DATA); SqlCommand command; //I know this code is wrong have to covert into timestamp string or add a certain value to timestamp to make proper timestamp command = new SqlCommand("SELECT * FROM PowergridView WHERE PowerScout = @meter AND Timestamp > @startTime AND Timestamp <= @endTime ORDER BY Timestamp", piConnection); // Add the parameters. command.Parameters.Add(new SqlParameter("@startTime", startTime.ToString(Constants.DATE_TIME_FORMAT))); command.Parameters.Add(new SqlParameter("@endTime", endTime.ToString(Constants.DATE_TIME_FORMAT))); command.Parameters.Add(new SqlParameter("@meter", meter)); SqlDataReader pireader = command.ExecuteReader(); List <AzureDataModel> meterDataList = new List <AzureDataModel>(); DateTime lastProcessedDate = DateTime.Now; while (pireader.Read()) { AzureDataModel data = new AzureDataModel(); string serialNumber = Convert.ToString(pireader["Serial Number"]); DateTime utcDate; DateTime.TryParse(pireader["Timestamp"].ToString(), out utcDate); WeatherDetails weatherDetails = GetWeatherDetails(utcDate, weatherConnection); lastProcessedDate = utcDate; utcDate = utcDate.AddHours(utcConversionTime); var utcSQLFormattedDate = utcDate.ToString(Constants.DATE_TIME_FORMAT); ClassScheduleManager.Instance().ReInitialize(piServerName); ClassOccupanyDetails classDetails = ClassScheduleManager.Instance().ProcessDataRow(serialNumber, utcDate); if (pireader["Id"] != DBNull.Value) { data.Id = Convert.ToInt32(pireader["Id"]); } if (pireader["Amps L1"] != DBNull.Value) { data.AMPS_L1 = Convert.ToDouble(pireader["Amps L1"]); } if (pireader["Amps L2"] != DBNull.Value) { data.AMPS_L2 = Convert.ToDouble(pireader["Amps L2"]); } if (pireader["Amps L3"] != DBNull.Value) { data.AMPS_L3 = Convert.ToDouble(pireader["Amps L3"]); } if (pireader["Amps System Avg"] != DBNull.Value) { data.AMPS_SYSTEM_AVG = Convert.ToDouble(pireader["Amps System Avg"]); } if (pireader["Breaker Details"] != DBNull.Value) { data.Breaker_details = Convert.ToString(pireader["Breaker Details"]); } if (pireader["Breaker Label"] != DBNull.Value) { data.Breaker_label = Convert.ToString(pireader["Breaker Label"]); } if (pireader["Building"] != DBNull.Value) { data.Building = Convert.ToString(pireader["Building"]); } data.ClassOccupanyRemaining = classDetails.ClassOccupanyRemaining; data.ClassOccupiedValue = classDetails.ClassOccupiedValue; data.TotalClassCapacity = classDetails.ClassTotalCapacity; data.isClassOccupied = classDetails.IsClassOccupied; if (pireader["Daily Electric Cost"] != DBNull.Value) { data.Daily_electric_cost = Convert.ToDouble(pireader["Daily Electric Cost"]); } if (pireader["Daily kWh System"] != DBNull.Value) { data.Daily_KWH_System = Convert.ToDouble(pireader["Daily kWh System"]); } if (pireader["kW L1"] != DBNull.Value) { data.KW_L1 = Convert.ToDouble(pireader["kW L1"]); } if (pireader["kW L2"] != DBNull.Value) { data.KW_L2 = Convert.ToDouble(pireader["kW L2"]); } if (pireader["kW L3"] != DBNull.Value) { data.KW_L3 = Convert.ToDouble(pireader["kW L3"]); } if (pireader["Monthly Electric Cost"] != DBNull.Value) { data.Monthly_electric_cost = Convert.ToDouble(pireader["Monthly Electric Cost"]); } if (pireader["Monthly kWh System"] != DBNull.Value) { data.Monthly_KWH_System = Convert.ToDouble(pireader["Monthly kWh System"]); } if (pireader["PowerScout"] != DBNull.Value) { data.PowerScout = Convert.ToString(pireader["PowerScout"]); } if (pireader["Rated Amperage"] != DBNull.Value) { data.Rated_Amperage = Convert.ToDouble(pireader["Rated Amperage"]); } data.Pressure = Convert.ToDouble(weatherDetails.Pressure); data.Relative_humidity = Convert.ToDouble(weatherDetails.RelativeHumidity); if (pireader["Rolling Hourly kWh System"] != DBNull.Value) { data.Rolling_hourly_kwh_system = Convert.ToDouble(pireader["Rolling Hourly kWh System"]); } if (pireader["Serial Number"] != DBNull.Value) { data.Serial_number = Convert.ToString(pireader["Serial Number"]); } data.Temperature = Convert.ToDouble(weatherDetails.Temperature); //Check here data.Timestamp = Convert.ToDateTime(utcSQLFormattedDate); if (pireader["Type"] != DBNull.Value) { data.Type = Convert.ToString(pireader["Type"]); } data.Visibility = Convert.ToDouble(weatherDetails.Visibility); if (pireader["Volts L1 to Neutral"] != DBNull.Value) { data.Volts_L1_to_neutral = Convert.ToDouble(pireader["Volts L1 to Neutral"]); } if (pireader["Volts L2 to Neutral"] != DBNull.Value) { data.Volts_L2_to_neutral = Convert.ToDouble(pireader["Volts L2 to Neutral"]); } if (pireader["Volts L3 to Neutral"] != DBNull.Value) { data.Volts_L3_to_neutral = Convert.ToDouble(pireader["Volts L3 to Neutral"]); } if (pireader["kW System"] != DBNull.Value) { data.kW_System = Convert.ToDouble(pireader["kW System"]); } data.PiServerName = piServerName; meterDataList.Add(data); meterTimestamp[meter] = lastProcessedDate; //count++; } pireader.Close(); //Hack Hack Hack if (meterDataList != null && meterDataList.Count != 0) { //This condition means we get all (29)entries of that perticular half hour if (Utility.TrimDateToMinute(lastProcessedDate) == endTime.AddMinutes(-1)) { Console.WriteLine("Now going to update Database"); updateDatabase(meterDataList); processedDataInfo.MeterTimestamp = meterTimestamp; Console.Write("Storing value to Blob : " + processedDataInfo); BlobStorageManager.Instance().SetLastProcessedData <ProcessedDataModel>(piServerName, Constants.THRESHOLD_METER_STORAGE_FILENAME_PREFIX, processedDataInfo); } else { //will wait for half an hour if there is not all entries in selected half hour block i.e 29 entries Console.WriteLine("**************Sleeping*******************"); Thread.Sleep(1800000); } } return(true); }); ConnectionManager.Instance().CloseSQLConnection(piConnection); ConnectionManager.Instance().CloseSQLConnection(weatherConnection); } catch (Exception e) { Console.WriteLine("*********Exception Occured ******" + e.Message); } } }