276 lines
14 KiB
C#
276 lines
14 KiB
C#
using DbAPI.Connections;
|
|
using DbAPI.Errors;
|
|
using DbAPI.Logging;
|
|
using DTS.Common.Classes.TestSetups;
|
|
using DTS.Common.Interface.Database;
|
|
using DTS.Common.Interface.Graphs;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Data;
|
|
using System.Data.SqlClient;
|
|
using System.Diagnostics;
|
|
|
|
namespace DbAPI.TestSetups
|
|
{
|
|
/// <summary>
|
|
/// Handles graph functions
|
|
/// <inheritdoc cref="IGraphs"/>
|
|
/// </summary>
|
|
internal class Graphs : IGraphs
|
|
{
|
|
/// <summary>
|
|
/// removes a record from the db
|
|
/// </summary>
|
|
/// <param name="user">user removing record</param>
|
|
/// <param name="connection">connection record is being removed on</param>
|
|
/// <param name="graphId">database id of record being removed</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
|
|
public ulong GraphsDelete(IUserDbRecord user, IConnectionDetails connection, int graphId)
|
|
{
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestGraphsDelete");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
|
|
cmd.Parameters.Add(new SqlParameter("@GraphId", SqlDbType.Int) { Value = graphId });
|
|
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
|
|
{ Direction = ParameterDirection.Output };
|
|
cmd.Parameters.Add(errorNumber);
|
|
|
|
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
|
|
{ Direction = ParameterDirection.Output };
|
|
cmd.Parameters.Add(errorMessage);
|
|
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (null != errorNumber.Value && 0 != Convert.ToInt32(errorNumber.Value))
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsDelete error: {errorNumber.Value} - {errorMessage.Value}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsInsert exception {ex.Message}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
/// <summary>
|
|
/// inserts a record into the db, updates GraphId of record after insert with database id
|
|
/// </summary>
|
|
/// <param name="user">user inserting record</param>
|
|
/// <param name="connection">connection record is being inserted on</param>
|
|
/// <param name="record">record being inserted</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
|
|
public ulong GraphsInsert(IUserDbRecord user, IConnectionDetails connection, ref IGraphRecord record)
|
|
{
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestGraphsInsert");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
if (null == record)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsUpdate no record supplied to update");
|
|
cmd.Connection.Dispose();
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
|
|
cmd.Parameters.Add(new SqlParameter("@GraphName", SqlDbType.NVarChar, 50)
|
|
{ Value = record.GraphName });
|
|
cmd.Parameters.Add(new SqlParameter("@GraphDescription", SqlDbType.NVarChar, 50)
|
|
{ Value = record.GraphDescription });
|
|
|
|
cmd.Parameters.Add(new SqlParameter("@Channels", SqlDbType.NVarChar, 2048) { Value = record.ChannelsString });
|
|
cmd.Parameters.Add(new SqlParameter("@UseDomainMin", SqlDbType.Bit) { Value = record.UseDomainMin });
|
|
cmd.Parameters.Add(new SqlParameter("@DomainMin", SqlDbType.Float) { Value = record.DomainMin });
|
|
cmd.Parameters.Add(new SqlParameter("@UseDomainMax", SqlDbType.Bit) { Value = record.UseDomainMax });
|
|
cmd.Parameters.Add(new SqlParameter("@DomainMax", SqlDbType.Float) { Value = record.DomainMax });
|
|
cmd.Parameters.Add(new SqlParameter("@UseRangeMin", SqlDbType.Bit) { Value = record.UseRangeMin });
|
|
cmd.Parameters.Add(new SqlParameter("@RangeMin", SqlDbType.Float) { Value = record.RangeMin });
|
|
cmd.Parameters.Add(new SqlParameter("@UseRangeMax", SqlDbType.Bit) { Value = record.UseRangeMax });
|
|
cmd.Parameters.Add(new SqlParameter("@RangeMax", SqlDbType.Float) { Value = record.RangeMax });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@Thresholds", SqlDbType.NVarChar, 2048) { Value = record.ThresholdsString });
|
|
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = record.LocalOnly });
|
|
|
|
var newId = new SqlParameter("@new_id", SqlDbType.Int) { Direction = ParameterDirection.Output };
|
|
cmd.Parameters.Add(newId);
|
|
|
|
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
|
|
{ Direction = ParameterDirection.Output };
|
|
|
|
cmd.Parameters.Add(errorNumber);
|
|
|
|
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
|
|
{ Direction = ParameterDirection.Output };
|
|
cmd.Parameters.Add(errorMessage);
|
|
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (null != errorNumber.Value && 0 != Convert.ToInt32(errorNumber.Value))
|
|
{
|
|
throw new Exception((string)errorMessage.Value);
|
|
}
|
|
|
|
record.GraphId = Convert.ToInt32(newId.Value);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsInsert exception {ex.Message}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
/// <summary>
|
|
/// updates a record in the database
|
|
/// </summary>
|
|
/// <param name="user">user updating record</param>
|
|
/// <param name="connection">connection record is being updated on</param>
|
|
/// <param name="record">record to update</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
|
|
public ulong GraphsUpdate(IUserDbRecord user, IConnectionDetails connection, IGraphRecord record)
|
|
{
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestGraphsUpdate");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
if (null == record)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsUpdate no record supplied to update");
|
|
return ErrorCodes.ERROR_MISSING_PARAMETER;
|
|
}
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
cmd.Parameters.Add(new SqlParameter("@GraphId", SqlDbType.Int) { Value = record.GraphId });
|
|
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = record.TestSetupId });
|
|
cmd.Parameters.Add(new SqlParameter("@GraphName", SqlDbType.NVarChar, 50)
|
|
{ Value = record.GraphName });
|
|
cmd.Parameters.Add(new SqlParameter("@GraphDescription", SqlDbType.NVarChar, 50)
|
|
{ Value = record.GraphDescription });
|
|
cmd.Parameters.Add(new SqlParameter("@Channels", SqlDbType.NVarChar, 2048) { Value = record.ChannelsString });
|
|
cmd.Parameters.Add(new SqlParameter("@UseDomainMin", SqlDbType.Bit) { Value = record.UseDomainMin });
|
|
cmd.Parameters.Add(new SqlParameter("@DomainMin", SqlDbType.Float) { Value = record.DomainMin });
|
|
cmd.Parameters.Add(new SqlParameter("@UseDomainMax", SqlDbType.Bit) { Value = record.UseDomainMax });
|
|
cmd.Parameters.Add(new SqlParameter("@DomainMax", SqlDbType.Float) { Value = record.DomainMax });
|
|
cmd.Parameters.Add(new SqlParameter("@UseRangeMin", SqlDbType.Bit) { Value = record.UseRangeMin });
|
|
cmd.Parameters.Add(new SqlParameter("@RangeMin", SqlDbType.Float) { Value = record.RangeMin });
|
|
cmd.Parameters.Add(new SqlParameter("@UseRangeMax", SqlDbType.Bit) { Value = record.UseRangeMax });
|
|
cmd.Parameters.Add(new SqlParameter("@RangeMax", SqlDbType.Float) { Value = record.RangeMax });
|
|
cmd.Parameters.Add(
|
|
new SqlParameter("@Thresholds", SqlDbType.NVarChar, 2048) { Value = record.ThresholdsString });
|
|
cmd.Parameters.Add(new SqlParameter("@LocalOnly", SqlDbType.Bit) { Value = record.LocalOnly });
|
|
|
|
var errorNumber = new SqlParameter("@errorNumber", SqlDbType.Int)
|
|
{ Direction = ParameterDirection.Output };
|
|
|
|
cmd.Parameters.Add(errorNumber);
|
|
|
|
var errorMessage = new SqlParameter("@errorMessage", SqlDbType.NVarChar, 255)
|
|
{ Direction = ParameterDirection.Output };
|
|
cmd.Parameters.Add(errorMessage);
|
|
|
|
cmd.ExecuteNonQuery();
|
|
|
|
if (null != errorNumber.Value && 0 != Convert.ToInt32(errorNumber.Value))
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsUpdate exception {errorNumber.Value} - {errorMessage.Value}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"GraphsUpdate exception {ex.Message}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
/// <summary>
|
|
/// retrieves all graph records matching search criteria
|
|
/// </summary>
|
|
/// <param name="user">user making query</param>
|
|
/// <param name="connection">connection query is being made on</param>
|
|
/// <param name="graphId">graph to query for (can be null)</param>
|
|
/// <param name="testSetupId">test setup graph belongs to</param>
|
|
/// <param name="records">all matching records found</param>
|
|
/// <returns>0 (ERROR_SUCCESS) on success, all other values are error codes</returns>
|
|
public ulong GraphsGet(IUserDbRecord user, IConnectionDetails connection,
|
|
int? graphId,
|
|
int? testSetupId,
|
|
out IGraphRecord[] records)
|
|
{
|
|
records = new IGraphRecord[0];
|
|
if (!DbAPI.Connections.IsUserLoggedIn(user, connection))
|
|
{
|
|
return ErrorCodes.ERROR_ACCESS_DENIED;
|
|
}
|
|
var ret = ConnectionManager.GetSqlCommand(connection, out var cmd, "sp_TestGraphsGet");
|
|
if (ret != ErrorCodes.ERROR_SUCCESS) { return ret; }
|
|
try
|
|
{
|
|
cmd.CommandType = CommandType.StoredProcedure;
|
|
|
|
if (null == graphId)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = null });
|
|
}
|
|
else { cmd.Parameters.Add(new SqlParameter("@Id", SqlDbType.Int) { Value = (int)graphId }); }
|
|
|
|
if (null == testSetupId)
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = null });
|
|
}
|
|
else
|
|
{
|
|
cmd.Parameters.Add(new SqlParameter("@TestSetupId", SqlDbType.Int) { Value = (int)testSetupId });
|
|
}
|
|
|
|
var reader = cmd.ExecuteReader();
|
|
var list = new List<IGraphRecord>();
|
|
while (reader.Read())
|
|
{
|
|
var graph = new GraphRecord(reader);
|
|
list.Add(graph);
|
|
}
|
|
records = list.ToArray();
|
|
|
|
return ErrorCodes.ERROR_SUCCESS;
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
LogManager.Log(TraceEventType.Error, LogManager.LogEvents.Graphs, $"sp_GraphsGet failed: {ex.Message}");
|
|
return ErrorCodes.ERROR_UNKNOWN;
|
|
}
|
|
finally
|
|
{
|
|
cmd.Connection.Dispose();
|
|
}
|
|
}
|
|
}
|
|
}
|