public string GetEventFrame(string Id) { var db = InitializeAf(); string result; Guid guid = new Guid(Id); AFEventFrame eventFrame = AFEventFrame.FindEventFrame(db.PISystem, guid); var attributes = eventFrame.Attributes; var attributesList = new List <AttributeString>(); foreach (var attribute in attributes) { if (attribute.Attributes.Count > 0) { var att = attribute.Attributes; } var a = new AttributeString { Name = attribute.Name, Type = attribute.Type.ToString() }; if (attribute.GetValue().Value != null) { a.Value = attribute.GetValue().Value.ToString(); } attributesList.Add(a); } var serializer = new JavaScriptSerializer(); result = serializer.Serialize(attributesList); return(result); }
public void EventFrameHierarchyTest() { AFDatabase db = Fixture.AFDatabase; string uniqueText = DateTime.UtcNow.ToString(AFFixture.DateTimeFormat, CultureInfo.InvariantCulture); string rootEFName = $"OSIsoftTests_AF_EventFrameHierarchyTest_{uniqueText}RootElem"; string ef1Name = $"OSIsoftTests_AF_EventFrameHierarchyTest_{uniqueText}EF1"; string ef2Name = $"OSIsoftTests_AF_EventFrameHierarchyTest_{uniqueText}EF2"; string ef3Name = $"OSIsoftTests_AF_EventFrameHierarchyTest_{uniqueText}EF3"; string ef4Name = $"OSIsoftTests_AF_EventFrameHierarchyTest_{uniqueText}EF4"; try { Output.WriteLine($"Create root Event Frame [{rootEFName}] with hierarchy 4 Event Frames deep."); var rootEF = new AFEventFrame(db, ef1Name); var ef1 = new AFEventFrame(db, ef1Name); var ef2 = new AFEventFrame(db, ef2Name); var ef3 = new AFEventFrame(db, ef3Name); var ef4 = new AFEventFrame(db, ef4Name); rootEF.EventFrames.Add(ef1); ef1.EventFrames.Add(ef2); ef2.EventFrames.Add(ef3); ef3.EventFrames.Add(ef4); db.CheckIn(); Output.WriteLine("Check that event frame hierarchy was created correctly."); db = Fixture.ReconnectToDB(); // This operation clears AFSDK cache and assures retrieval from AF server var foundRootEF = AFEventFrame.FindEventFrame(db.PISystem, rootEF.ID); Assert.True(foundRootEF != null, $"Created Event Frame [{rootEFName}] not found with ID [{rootEF.ID}]."); AFEventFrame lastEFInHeirarchy = foundRootEF.EventFrames[ef1Name].EventFrames[ef2Name].EventFrames[ef3Name].EventFrames[ef4Name]; Assert.True(lastEFInHeirarchy != null, $"Search down hierarchy from root did not find Event Frame."); Assert.True(lastEFInHeirarchy.Name.Equals(ef4Name, StringComparison.OrdinalIgnoreCase), $"Event Frame found at bottom of hierarchy from root [{rootEFName}]" + $" was named [{lastEFInHeirarchy.Name}], expected [{ef4Name}]."); } finally { Fixture.RemoveEventFrameIfExists(rootEFName, Output); Fixture.RemoveEventFrameIfExists(ef1Name, Output); Fixture.RemoveEventFrameIfExists(ef2Name, Output); Fixture.RemoveEventFrameIfExists(ef3Name, Output); Fixture.RemoveEventFrameIfExists(ef4Name, Output); } }
public void EventFrameTest() { AFDatabase db = Fixture.AFDatabase; const string EventFrameName = "OSIsoftTests_AF_InitEF#1A"; const string EventFrameRename = "OSIsoftTests_AF_EventFrameTest_NewName"; var testData = new EventFrameTestConfiguration(EventFrameName); try { Output.WriteLine($"Create Event Frame [{EventFrameName}]."); var evtfr1 = FullEventFrameCreate(db, testData); db.CheckIn(); Output.WriteLine("Confirm Event Frame created and found."); db = Fixture.ReconnectToDB(); // This operation clears AFSDK cache and assures retrieval from AF server evtfr1 = AFEventFrame.FindEventFrame(db.PISystem, evtfr1.ID); FullEventFrameVerify(db, evtfr1.ID, testData, Output); Output.WriteLine($"Rename Event Frame to [{EventFrameRename}]."); evtfr1.Name = EventFrameRename; db.CheckIn(); // Update test data with new name testData.Name = EventFrameRename; Output.WriteLine($"Verify Event Frame [{EventFrameRename}] found on reread."); db = Fixture.ReconnectToDB(); evtfr1 = AFEventFrame.FindEventFrame(db.PISystem, evtfr1.ID); FullEventFrameVerify(db, evtfr1.ID, testData, Output); Output.WriteLine($"Delete Event Frame [{EventFrameRename}]."); evtfr1.Delete(); db.CheckIn(); Output.WriteLine($"Confirm Event Frame deleted."); db = Fixture.ReconnectToDB(); var deletedEFSearch = AFEventFrame.FindEventFrame(db.PISystem, evtfr1.ID); Assert.True(deletedEFSearch == null, $"Event Frame [{EventFrameRename}] was not deleted as expected."); } finally { Fixture.RemoveElementIfExists(testData.EventFrameElementName, Output); } }
/// <summary> /// Remove the event frame by id if it exists. /// </summary> /// <param name="id">The Id of the event frame to remove.</param> /// <param name="output">The output logger used for writing messages.</param> public void RemoveEventFrameIfExists(Guid id, ITestOutputHelper output) { Contract.Requires(output != null); var preCheckEventFrame = AFEventFrame.FindEventFrame(PISystem, id); if (preCheckEventFrame != null) { output.WriteLine($"Event Frame [{preCheckEventFrame}] exists, delete it."); preCheckEventFrame.Delete(); preCheckEventFrame.CheckIn(); } else { output.WriteLine($"Event Frame with GUID [{id}] does not exist, can not be deleted."); } }
private void EFListView_SelectedIndexChanged(object sender, EventArgs e) { if (EFListView.SelectedItems.Count == 1) { EFAttrView.Items.Clear(); ListViewItem SelectedEF = EFListView.SelectedItems[0]; Guid myEFGUID = Guid.Empty; String myguidstring = SelectedEF.SubItems[4].Text; try { myEFGUID = Guid.Parse(myguidstring); } catch { MessageBox.Show("Cannot convert GUID"); } AFEventFrame myEF = AFEventFrame.FindEventFrame(myAFServer, myEFGUID); AFAttributes myEFAttrs = myEF.Attributes; foreach (AFAttribute attr in myEFAttrs) { string[] displayvalues = new string[4]; displayvalues[0] = attr.Name; try { displayvalues[1] = attr.Data.RecordedValue(myEF.EndTime, AFRetrievalMode.AtOrAfter, null).ToString(); } catch { try { displayvalues[1] = attr.GetValue().ToString(); } catch (Exception ex2) { MessageBox.Show(ex2.Message); } } displayvalues[2] = myEF.Name; displayvalues[3] = myEF.UniqueID; ListViewItem lvi = new ListViewItem(displayvalues); EFAttrView.Items.Add(lvi); } } }
/// <summary> /// Verifies a complex event frame object. /// </summary> /// <param name="db">The AF Database that contains the event frame being verified.</param> /// <param name="evtfrmId">ID (GUID) of the event frame to be verified.</param> /// <param name="expData">Expected Data to check the event frame.</param> /// <param name="output">The output logger used for writing messages.</param> /// <remarks> /// This routine is used to verify event frames created using the FullEventFrameCreate() routine. /// </remarks> private void FullEventFrameVerify(AFDatabase db, Guid evtfrmId, EventFrameTestConfiguration expData, ITestOutputHelper output) { var eventFrameFound = AFEventFrame.FindEventFrame(db.PISystem, evtfrmId); Assert.True(eventFrameFound != null, $"Unable to find Event Frame [{expData.Name}] with ID [{evtfrmId}]."); string actEFName = eventFrameFound.Name; Assert.True(actEFName.Equals(expData.Name, StringComparison.OrdinalIgnoreCase), $"Element Template found with ID [{evtfrmId}] had name [{actEFName}], expected [{expData.Name}]."); Assert.True(db.AttributeCategories[expData.AttributeCategoryName] != null, $"Check Failed. Attribute Category [{expData.AttributeCategoryName}] not found."); Assert.True(db.ElementCategories[expData.ElementCategoryName] != null, $"Check Failed. Element Category [{expData.ElementCategoryName}] not found."); output.WriteLine("Check Event Frame Attributes."); int actualAttributeCount = eventFrameFound.Attributes.Count; Assert.True(actualAttributeCount == 3, $"Event Frame Attribute Count Failed. Actual {actualAttributeCount}, expected 3."); var attr1 = eventFrameFound.Attributes[expData.Attribute1Name]; Assert.True(attr1 != null, $"Event Frame [{expData.Name}] did not have attribute [{expData.Attribute1Name}] as expected."); Assert.True(attr1.Categories[expData.AttributeCategoryName] != null, $"Attribute [{expData.Attribute1Name}] in Event Frame [{expData.Name}]" + $" did not have category [{expData.AttributeCategoryName}] as expected."); var attr2 = eventFrameFound.Attributes[expData.Attribute2Name]; Assert.True(attr2 != null, $"Event Frame [{expData.Name}] did not have attribute [{expData.Attribute2Name}] as expected."); Assert.True(expData.Attribute2Value == attr2.GetValue().ValueAsDouble(), $"Event Frame [{expData.Name}] attribute [{expData.Attribute2Name}] data was" + $" [{attr2.GetValue().ValueAsDouble()}], expected [{expData.Attribute2Value}]."); var attr3 = eventFrameFound.Attributes[expData.Attribute3Name]; Assert.True(attr3 != null, $"Event Frame [{expData.Name}] did not have attribute [{expData.Attribute3Name}] as expected."); Assert.True(attr3.DataReferencePlugIn == db.PISystem.DataReferencePlugIns[expData.DataReferencePlugInName], $"Attribute [{expData.Attribute3Name}] in Event Frame [{expData.Name}]" + $" did not have data reference PlugIn [{expData.DataReferencePlugInName}] as expected."); Assert.True(attr3.ConfigString == expData.DataReferenceConfigString, $"Attribute [{expData.Attribute3Name}] in Event Frame [{expData.Name}] data reference ConfigString was" + $" [{attr3.ConfigString}], expected [{expData.DataReferenceConfigString}]."); output.WriteLine("Check Event Frame Categories."); int actualEventFrameCategoriesCount = eventFrameFound.Categories.Count; const int ExpectedEventFrameCategoriesCount = 1; Assert.True(actualEventFrameCategoriesCount == ExpectedEventFrameCategoriesCount, $"Category Count in Event Frame [{expData.Name}] was " + $"{actualEventFrameCategoriesCount}, expected {ExpectedEventFrameCategoriesCount}."); Assert.True(eventFrameFound.Categories[expData.ElementCategoryName] != null, $"Category [{expData.ElementCategoryName}] not found in Event Frame [{expData.Name}] as expected."); output.WriteLine("Check Child Event Frames."); int actualEventFrameCount = eventFrameFound.EventFrames.Count; const int ExpectedEventFrameCount = 1; Assert.True(actualEventFrameCount == ExpectedEventFrameCount, $"Count in Event Frame [{expData.Name}] was {actualEventFrameCount}, expected {ExpectedEventFrameCount}."); Assert.True(eventFrameFound.EventFrames[expData.ChildEventFrame] != null, $"Child Event Frame [{expData.ChildEventFrame}] not found in Event Frame [{expData.Name}] as expected."); output.WriteLine("Check Extended properties."); int actualExtPropertiesCount = eventFrameFound.ExtendedProperties.Count; const int ExpectedExtPropertiesCount = 1; Assert.True(actualExtPropertiesCount == ExpectedExtPropertiesCount, $"ExtendedProperties Count in Event Frame [{expData.Name}] was {actualExtPropertiesCount}, expected {ExpectedExtPropertiesCount}."); string actualExtPropValue = eventFrameFound.ExtendedProperties[expData.ExtPropKey].ToString(); Assert.True(actualExtPropValue.Equals(expData.ExtPropValue, StringComparison.OrdinalIgnoreCase), $"ExtendedProperty Key [{expData.ExtPropKey}] in Event Frame [{expData.Name}]" + $" had Value [{actualExtPropValue}], expected [{expData.ExtPropValue}]."); output.WriteLine("Check Referenced Element."); int actualRefdElementsCount = eventFrameFound.ReferencedElements.Count; const int ExpectedRefdElementsCount = 1; Assert.True(actualRefdElementsCount == ExpectedRefdElementsCount, $"Referenced Element Count in Event Frame [{expData.Name}] was {actualRefdElementsCount}, expected {ExpectedRefdElementsCount}."); Assert.True(actualExtPropValue.Equals(expData.ExtPropValue, StringComparison.OrdinalIgnoreCase), $"Referenced Element [{expData.EventFrameElementName}] not found in Event Frame [{expData.Name}] as expected."); output.WriteLine("Check Event Frame Annotations."); var annotations = eventFrameFound.GetAnnotations(); int actualAnnotationsCount = annotations.Count; const int ExpectedAnnotationsCount = 1; Assert.True(actualAnnotationsCount == ExpectedAnnotationsCount, $"Annotations Count in Event Frame [{expData.Name}] was {actualAnnotationsCount}, expected {ExpectedAnnotationsCount}."); Assert.True(annotations[0].Name.Equals(expData.AnnotationName, StringComparison.OrdinalIgnoreCase), $"Annotations[0] Name in Event Frame [{expData.Name}] was [{annotations[0].Name}], expected [{expData.AnnotationName}]."); Assert.True(annotations[0].Value.ToString().Equals(expData.AnnotationValue, StringComparison.OrdinalIgnoreCase), $"Annotations[0] Value in Event Frame [{expData.Name}] was [{annotations[0].Value.ToString()}], expected [{expData.AnnotationValue}]."); }
public void EventFrameAttributeSetValueTest() { AFDatabase db = Fixture.AFDatabase; string ef1Name = $"OSIsoftTests_AF_EFAttrSrchTst - {DateTime.UtcNow.ToString(AFFixture.DateTimeFormat, CultureInfo.InvariantCulture)}_EF1"; const string Attribute1Name = "OSIsoftTests_EFAttr#1"; const string Attribute2Name = "OSIsoftTests_EFAttr#2"; const string Attribute3Name = "OSIsoftTests_EFAttr#3"; const double DoubleValue1 = 123.456; const int IntegerValue2 = 2; const string StringValue3 = "value"; try { Output.WriteLine($"Create event frame [{ef1Name}] and add 3 attributes."); var newEF = new AFEventFrame(db, ef1Name); Output.WriteLine($"Create attribute [{Attribute1Name}] with a double value."); var attr1 = newEF.Attributes.Add(Attribute1Name); attr1.Type = typeof(double); attr1.SetValue(DoubleValue1, null); Output.WriteLine($"Create attribute [{Attribute2Name}] with an integer value."); var attr2 = newEF.Attributes.Add(Attribute2Name); attr2.Type = typeof(int); attr2.SetValue(IntegerValue2, null); Output.WriteLine($"Create attribute [{Attribute3Name}] with a string value."); var attr3 = newEF.Attributes.Add(Attribute3Name); attr3.Type = typeof(string); attr3.SetValue(StringValue3, null); db.CheckIn(); Output.WriteLine($"Confirm event frame creation."); db = Fixture.ReconnectToDB(); // This operation clears AFSDK cache and assures retrieval from AF server var readEventFrame = AFEventFrame.FindEventFrame(db.PISystem, newEF.ID); Output.WriteLine($"Check attribute 1 value."); var actualAttribute1Value = readEventFrame.Attributes[Attribute1Name].GetValue(); var actualAttribute1Type = actualAttribute1Value.ValueType; Assert.True(actualAttribute1Type == typeof(double), $"Value read from Attribute [{Attribute1Name}] " + $"did not have expected type [{actualAttribute1Type}], expected [{typeof(double)}]."); Assert.True(actualAttribute1Value.ValueAsDouble() == DoubleValue1, $"Value for Attribute [{Attribute1Name}]" + $" was [{actualAttribute1Value.ValueAsDouble()}], expected [{DoubleValue1}]."); Output.WriteLine($"Check attribute 2 value."); var actualAttribute2Value = readEventFrame.Attributes[Attribute2Name].GetValue(); var actualAttribute2Type = actualAttribute2Value.ValueType; Assert.True(actualAttribute2Type == typeof(int), $"Value read from Attribute [{Attribute2Name}]" + $" did not have expected type [{actualAttribute2Type}], expected [{typeof(int)}]."); Assert.True(actualAttribute2Value.ValueAsDouble() == IntegerValue2, $"Value for Attribute [{Attribute2Name}]" + $" was [{actualAttribute2Value.ValueAsInt32()}], expected [{IntegerValue2}]."); Output.WriteLine($"Check attribute 3 value."); var actualAttribute3Value = readEventFrame.Attributes[Attribute3Name].GetValue(); var actualAttribute3Type = actualAttribute3Value.ValueType; Assert.True(actualAttribute3Type == typeof(string), $"Value read from Attribute [{Attribute3Name}]" + $" did not have expected type [{actualAttribute3Type}], expected [{typeof(string)}]."); Assert.True(actualAttribute3Value.Value.ToString() == StringValue3, $"Value for Attribute [{Attribute3Name}]" + $" was [{actualAttribute3Value.Value.ToString()}], expected [{StringValue3}]."); attr1 = readEventFrame.Attributes[Attribute1Name]; attr2 = readEventFrame.Attributes[Attribute2Name]; attr3 = readEventFrame.Attributes[Attribute3Name]; Output.WriteLine("Set attribute values for the second time."); attr1.SetValue(DoubleValue1, null); attr2.SetValue(IntegerValue2, null); attr3.SetValue(StringValue3, null); db.CheckIn(); db = Fixture.ReconnectToDB(); readEventFrame = AFEventFrame.FindEventFrame(db.PISystem, newEF.ID); Output.WriteLine($"Recheck attribute 1 value."); var actualAttribute1Value2 = readEventFrame.Attributes[Attribute1Name].GetValue(); var actualAttribute1Type2 = actualAttribute1Value2.ValueType; Assert.True(actualAttribute1Type2 == typeof(double), $"Value read from Attribute [{Attribute1Name}]" + $" did not have expected type [{actualAttribute1Type2}], expected [{typeof(double)}]."); Assert.True(actualAttribute1Value2.ValueAsDouble() == DoubleValue1, $"Value for Attribute [{Attribute1Name}]" + $" was [{actualAttribute1Value2.ValueAsDouble()}], expected [{DoubleValue1}]."); Output.WriteLine($"Recheck attribute 2 value."); var actualAttribute2Value2 = readEventFrame.Attributes[Attribute2Name].GetValue(); var actualAttribute2Type2 = actualAttribute2Value2.ValueType; Assert.True(actualAttribute2Type2 == typeof(int), $"Value read from Attribute [{Attribute2Name}]" + $" did not have expected type [{actualAttribute2Type2}], expected [{typeof(int)}]."); Assert.True(actualAttribute2Value2.ValueAsDouble() == IntegerValue2, $"Value for Attribute [{Attribute2Name}]" + $" was [{actualAttribute2Value.ValueAsInt32()}], expected [{IntegerValue2}]."); Output.WriteLine($"Check attribute 3 value."); var actualAttribute3Value2 = readEventFrame.Attributes[Attribute3Name].GetValue(); var actualAttribute3Type2 = actualAttribute3Value2.ValueType; Assert.True(actualAttribute3Type2 == typeof(string), $"Value read from Attribute [{Attribute3Name}]" + $" did not have expected type [{actualAttribute3Type2}], expected [{typeof(string)}]."); Assert.True(actualAttribute3Value2.Value.ToString() == StringValue3, $"Value for Attribute [{Attribute3Name}]" + $" was [{actualAttribute3Value2.Value.ToString()}], expected [{StringValue3}]."); } finally { Fixture.RemoveEventFrameIfExists(ef1Name, Output); } }
private void AddTrendButton_Click(object sender, EventArgs e) { if (EFListView.SelectedItems.Count >= 1 && EFAttrView.SelectedItems.Count >= 1) { for (int i = 0; i < EFListView.SelectedItems.Count; i++) { for (int j = 0; j < EFAttrView.SelectedItems.Count; j++) { ListViewItem SelectedEF = EFListView.SelectedItems[i]; ListViewItem SelectedEFattr = EFAttrView.SelectedItems[j]; //Get EFName and Attribute Name String EFName = SelectedEF.SubItems[0].Text; String EFattrName = SelectedEFattr.SubItems[0].Text; String title = num + "_" + EFName + " : " + EFattrName; //Create GUID for Selected Event Frame Guid myEFGUID = Guid.Empty; String myguidstring = SelectedEF.SubItems[4].Text; try { myEFGUID = Guid.Parse(myguidstring); } catch { MessageBox.Show("Cannot convert GUID"); } //Find Selected Event Frame AFEventFrame myEF = AFEventFrame.FindEventFrame(myAFServer, myEFGUID); AFTime startTime = myEF.StartTime; AFTime endTime = myEF.EndTime; //Set endtime as now for not finishing event frame if (endTime > new AFTime("2099/1/1")) { endTime = DateTime.Now; } AFTimeRange timerange = new AFTimeRange(startTime, endTime); //Find Selected Attribute AFAttribute myEFAttr = myEF.Attributes[SelectedEFattr.Text]; DateTime trendstarttime = new DateTime(0); //Check time difference between start time and end time TimeSpan timedif = endTime - startTime; try { AFValues vals = myEFAttr.Data.PlotValues(timerange, 100, null); Int32 chk = 0; foreach (AFValue val in vals) { //Sometimes System.InvalidOperationException happens. Type t = val.Value.GetType(); if (t.FullName != "System.InvalidOperationException") { if (chk == 0) { //Add line to chart1 try { //add trend to chart1 chart1.Series.Add(title); chart1.Series[title].ChartType = System.Windows.Forms.DataVisualization.Charting.SeriesChartType.Line; chart1.Series[title].BorderWidth = 2; // Line width chart1.Series[title].ToolTip = "#SERIESNAME\r\nValue : #VALY{N2}\r\nTime : #VALX{N0}"; chart1.ChartAreas[0].AxisX.Title = "Seconds"; //Zoom function chart1.ChartAreas[0].CursorX.IsUserSelectionEnabled = true; chart1.ChartAreas[0].CursorY.IsUserSelectionEnabled = true; } catch (Exception ex) { MessageBox.Show(ex.Message); return; } trendstarttime = val.Timestamp.LocalTime; } timedif = val.Timestamp.LocalTime - trendstarttime; //Displaying EnumerationSet value as number if (t.FullName == "OSIsoft.AF.Asset.AFEnumerationValue") { //Errchk = 1; AFEnumerationValue MyEnumerationValue = (AFEnumerationValue)val.Value; // last value will be returned as 248. So ignore it if (MyEnumerationValue.Value != 248) { chart1.Series[title].Points.AddXY(timedif.TotalSeconds, MyEnumerationValue.Value.ToString()); } } else { chart1.Series[title].Points.AddXY(timedif.TotalSeconds, val.Value.ToString()); } chk = 1; } else { Errchk = 1; //Write code for System.InvalidOperationException - Currently ignore it //AFValue val2 = myEFAttr.GetValue(endTime,null); //timedif = endTime - startTime; //chart1.Series[title].Points.AddXY(0, val2.Value.ToString()); //chart1.Series[title].Points.AddXY(timedif.TotalSeconds, val2.Value.ToString()); } } } catch { Errchk = 1; //If error happens, write code - Currently ignore it //AFValue val = myEFAttr.GetValue(endTime,null); //chart1.Series[title].Points.AddXY(0, val.Value.ToString()); //chart1.Series[title].Points.AddXY(timedif.TotalSeconds, val.Value.ToString()); } if (Errchk == 0) { //If there is no error, Set minimum and maximum time chart1.ChartAreas[0].AxisX.Minimum = 0; if (maxtimedif > timedif) { chart1.ChartAreas[0].AxisX.Maximum = maxtimedif.TotalSeconds; } else { chart1.ChartAreas[0].AxisX.Maximum = timedif.TotalSeconds; maxtimedif = timedif; } ++num; } Errchk = 0; } } } }