Profile

Tom Waterbley

User info

First name Tom
Last name Waterbley

DevOps Program

Acquired rank
Catalyst
Points progress
Number of DevOps Professional Points
15277 DevOps Points
Here are a few tips to level up your DevOps game and unlock an arsenal of perks and benefits.
DevOps attestation Request your attestation ID and expiry date

Achievements

Questions asked

Answers given

Hi Shawn, this is actually a very good question. Logging is very important to be able to quickly pinpoint the problem when something goes wrong. Your assumption that each level contains the lower level...

View Question

Hi Arne, when the device doesn't have a blocking call that only returns when the new data is ready, I don't think there are many alternatives. What you could try is to put the get requests also in a faster...

View Question

Hi Edib. As Laurens already mentioned, there could be a small performance impact when using SLProtocolExt, because some objects are being allocated. However the impact is probably very small and will almost...

View Question

Hi Alex, would try to use the partialSNMP option on those tables. Then DataMiner will only fetch x rows at a time, and allow to perform other things inbetween.

View Question
11 Votes Selected

In case you want to retrieve only one cell of a table GetParameterIndexByKey() is exactly what you need, and the most performant call.

View Question
11 Votes Selected

The following services are currently supported by the CloudWatch driver: Amazon AWS CloudWatch - API Gateway Amazon AWS CloudWatch - Direct Connect Amazon AWS CloudWatch - EC2 Amazon AWS CloudWatch -...

View Question

DVEs are by default not set into timeout when the main element is set into timeout. If you want an automatic timeout on the DVE when the main element is in timeout, you have to specify the following in...

View Question

Hi Oliver, see the note at the bottom of the following page: https://docs.dataminer.services/user-guide/Advanced_Modules/Correlation/Adding_rule_actions/Running_an_Automation_script_from_a_Correlation_rule.html...

View Question
9 Votes

Hi Apurva, That can easily be done by draging one of the columns of your GQI data source into the grouping feature of the table component:

View Question
8 Votes Selected

Hi Stijn, when choosing a profile instance, the values of the base instance will also be taken into account. Lower level profile instances overwrite values of higher level/base instances. The parameters...

View Question

Hi Stijn, there are several possibilities for this error message. 1) project has been built in release mode instead of debug mode 2) symbols haven't been loaded because the script hasn't run yet. The...

View Question

Hi Joey, I believe this can be done by installing the SRM package as an upgrade package in System Center.

View Question
7 Votes Selected

Hi, this could indeed be done by letting the correlation rule trigger an automation script. That script receives the necessary information from the correlation engine, including the element ID and name....

View Question
7 Votes Selected

Hi Ross, the email address based on UserLoginName, can be obtained using the following code: var req = new GetInfoMessage { Type = InfoType.SecurityInfo }; var userInfoResponse = (GetUserInfoResponseMessage)engine.SendSLNetSingleResponseMessage(req);...

View Question
7 Votes Selected

Hi Mieke, in automation scripts you can also use the same method to store data in memory as in QActions. Static fields and properties of classes are kept in memory during the lifetime of the SLAutomation...

View Question
6 Votes

Hi Apurva, Sorry for the late answer, but we saw that your second question was not answered yet. To retrieve a list of parameters and their IDs, a GQI custom data source is needed. I’ve quickly created...

View Question
6 Votes Selected

Hi Jens, You can retrieve it from the following property: Engine.SLNetRaw.ServerDetails.AgentID

View Question
6 Votes Selected

Hi Manuel, To use the UTF-8 character set, the unicode option indeed needs to be activated in the Type tag. In addition, it's also required to specify that the incoming SNMP data is encoded in UTF8,...

View Question
6 Votes Selected

Hi Alex, To solve this, you could create a new table that's linked to the multithreaded timer, instead of combining it with the already existing table. In that new table you could add rows for every request...

View Question
6 Votes Selected

Hi Edib, this can be achieved by using a static dictionary, with the element ID as key. I once created the following class to make this more generic and easy to use: https://gist.github.com/TomW-Skyline/805c689e62f0362d845ced2829a91aa1....

View Question

Hi Michiel, according to RN18279, this error is only raised when trying to save a ServiceReservationInstance or ServiceReservationDefinition that has the same name and overlapping timerange with another...

View Question
6 Votes Selected

Hi Jens, the following method can be used to acknowledge the alarm. If a user launches the script manually or attaches to it interactively, that user will become the owner of the alarm. If the script runs...

View Question

Hi Ladan, the IsSslTlsEnabled property was added to the ElementPortInfo class in DataMiner version 10.0.1.0 (see RN22873). DIS is using the DLL files from the local DataMiner installation to compile the...

View Question
6 Votes Selected

Hi Manuel, What you're looking for is GetInfoMessage with InfoType.ElementInfo. var request = new GetInfoMessage(InfoType.ElementInfo); var responses = dms.SendMessages(request); var elements = responses.OfType<ElementInfoEventMessage>();...

View Question
5 Votes Selected

Hi Mahito, The root cause why the 'Merge LCA themes' script sometimes fails has been identified. It appears that it can fail because no themes JSON file exist yet on the system. We now fixed this in...

View Question
5 Votes Selected

Hi Ana, Maybe an alternative could be to create a ZIP file with the selected files and download that instead?

View Question
5 Votes Selected

Hi Chian, In your connector you could use 'Monitors' to subscribe on element state changes. This is described on the following page: https://docs.dataminer.services/develop/devguide/ClassLibrary/ClassLibraryMonitorsGettingStarted.html....

View Question
5 Votes Selected

Hi Ryan, Using protocol.ShowInformationMessage() you can display a message to the user, but it indeed only has an OK button. Unfortunate it's currently not possible to build and show a custom UI. As...

View Question
5 Votes Selected

Hi Sebastian, this is possible using the AllowedFileNameExtensions property since DataMiner version 10.1.12, see https://docs.dataminer.services/develop/api/types/Skyline.DataMiner.Automation.UIBlockDefinition.AllowedFileNameExtensions.html....

View Question

Hi Alex, creating a dmapp package is only available when saving a single script, not when saving multiple scripts. When the xml file of a script is active in Visual Studio, the File > "Save Compiled...

View Question
5 Votes

Hi Maxime, the elements list-view on a view card has a column called "Impacted Services". This column provides a list of services the item is included in. This list can also be exported to a CSV file...

View Question
5 Votes Selected edited answer

Hi Joachim, could you please try with <RawType>numeric text</RawType> instead of <RawType>unsigned number</RawType>. At the bottom of the following page, there is an example that...

View Question
5 Votes Selected

Hi Michiel, what I typically do is creating a static field in that QAction. The value of that field is shared across all elements on that DMA. Best is to use a ConcurrentDictionary with the element ID...

View Question

Hi Martijn. Visual Studio for Mac is a completely different product, and doesn't support extensions. So DIS is also not supported on it. Visual Studio for Mac is actually originally based on Xamarin Studio...

View Question
5 Votes Selected

Hi Robin, first of all maybe check if there is no option that can be added to the initial GET /inputs to let it also return all details instead of only the basic list. On some APIs that option exists....

View Question
5 Votes Selected

";" and "|" are indeed used as separators between the different headers and their values, and cannot be used in the values. As far as I know they can also not be escaped. We will need to look into that....

View Question

More information about the CS1692 warning can be found here: https://docs.microsoft.com/en-us/dotnet/csharp/misc/cs1692. Apparently the code in that QAction uses "#pragma warning disable <number>"...

View Question
5 Votes Selected

Hi Ken, Please see the following answer on a similar question: https://community.dataminer.services/question/alarm-console-what-are-the-difference-between-an-alarm-font-regular-or-italic/answer/126786/

View Question
4 Votes Selected

Hi Hans, If the order of execution is important you could use an interactive automation script to do the sets. In that script you could then also check if the VLAN was properly removed before adding the...

View Question

Hi Vig, The value -9999 is probably an exception value that is defined in the protocol. That value is being used internally to represent N/A in the numeric parameter. With API I assume that you're talking...

View Question

Hi Steve, see the following page in our docs which explains what to do in case the system does not have an indexing database configured: https://docs.dataminer.services/user-guide/Troubleshooting/Known_issues/KI_Upgrade_fails_VerifyElasticStorageType_prerequisite.html?q=VerifyElasticStorage#fix

View Question

Hi Thomas, The DiscreteCapability filter can be used as follows: // Get all resources with a certain discrete option var encodingQualityParameterId = Guid.Parse("..."); // GUID of the profile...

View Question

Hi Julian, NotifyProtocol 168 is executed behind the scenes when the keys of a table are being retrieved. Probably there is somewhere a GetKeys() call with a non-existing table ID. ClearAllKeys() is another...

View Question

Hi Samson, Yes, (almost) all C# code works in automation scripts and connectors within DataMiner. StreamReader certainly works (using System.IO). Your CSVReader 3rd party library will also work if it's...

View Question
4 Votes Selected

Hi Jens, for debugging purposes you could serialize the object to a JSON string and log that.

View Question
4 Votes Selected

Hi Vish, All reservations can be retrieved by providing a TrueFilterElement as filter: var reservations = SrmManagers.ResourceManager.GetReservationInstances(new TRUEFilterElement<ReservationInstance>());...

View Question

Hi Maximiliano, See Deleting a custom alarm property in the documentation.

View Question
4 Votes

Hi Tobe, A history set, without using the hardcoded parameter ID, can be done as follows: protocol.SetParameter(Parameter.ParameterName, value, time);

View Question
4 Votes Selected

Hi Punit, Uploading files to Amazon AWS S3 can be done using the "Amazon AWS S3 File Upload" connector. A source directory can be configured in the element. When new files are placed in that directory,...

View Question
4 Votes Selected edited answer

Hi Jens, I always use this code to wrap the text after a specific number of characters. Usage: var wrapped = WrapText.Wrap(text, 150);

View Question
4 Votes Selected

Hi Manuel. I suspect that the QAction hasn't been executed yet since the QAction DLL is not visible in the modules window. It's normal to see that warning before the first execution of the QAction. Symbols...

View Question
4 Votes Selected

Hi Jens, see https://docs.dataminer.services/user-guide/Reference/Skyline_DataMiner_Folder/More_information_on_certain_files_and_folders/Hyperlinks_xml.html#filterelement. This optional attribute can...

View Question
4 Votes

Didn't test this yet, but another approach that might work is to let the script lock the elements it needs. Probably you'll need to call another subscript with the elements as input.

View Question
4 Votes

Hi Zheng. If another administrator still has access to the system, the easiest way to reset the password will be to ask that administrator to change it to something new. As far as I know the user cannot...

View Question
4 Votes Selected

Hi Philip, as far as I know there is no way to execute CheckTrigger from outside the protocol itself. As a temporary solution, until a better fix is available, you could maybe add a dummy parameter to...

View Question
4 Votes Selected

Hi Miguel, Maybe this could be done using Microsoft Power Automate. After a quick search I found the following template that allows to send a Whatsapp message after clicking a button. Maybe it can be...

View Question
4 Votes Selected

The preferred way is to do the communication in a connector, as Thijs already mentioned. If that's not desired, storing the credentials in "Windows Credential Manager" could be an option. See https://www.techradar.com/news/what-is-windows-credential-manager....

View Question
4 Votes Selected

Hi Miao, Reading a cell value from a table can be done as follows. It doesn't matter if it's a virtual element or not. public void Run(Engine engine) { var elementName ="my element"; var element = engine.FindElement(elementName);...

View Question
4 Votes Selected

Hi Alex, subscriptions are automatically recreated when the element (re)starts. Also after a DMA restart they are recreated. Nothing special needs to be done, you'll just start receiving updates again....

View Question
4 Votes Selected

Hi Jens, I think you can retrieve all that information from the information events, except maybe the dashboard/application changes. This would require a custom report to generate it. Another possibility...

View Question
4 Votes Selected

Hi Jens, see the following page for an explination on how to determine the installed .NET versions. Unfortunately it's not very straigtforward for versions >= 4.5. https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed...

View Question

Hi Ryan, would it please be possible to share the settings of the DMA that you've filled in on DIS? Normally you only need to fill in the IP address, without port number. The port number should automatically...

View Question
4 Votes Selected edited answer

Hi Joerg, could it be that there is a problem with the license of DIS? Most of those menu items are only disabled when DIS is not activated.

View Question
4 Votes Selected

Hi Sam, Unfortunately, this is not directly possible. However there are a few other approaches to achieve what you want: Create a visual overview and show/hide the parameter based on the other parameter....

View Question
3 Votes Selected

Hi, The datetime columns are formatted using the regional settings that are configured on the client. The date and time format can be different for every user on the system. For that reason I don't think...

View Question
3 Votes Selected

Hi Benjamin, What you could try to do is importing the certificate on the DataMiner server that is hosting the element. This will make the system recognize it as a trusted certificate. The following page...

View Question
3 Votes Selected

Hi João, The easiest way is to use the class library. More information can be found here. Using that library you can retrieve the element, and create a duplicate of it with another name. var dms = engine.GetDms();...

View Question
3 Votes Selected

Hi Alex, When data is being sent in a smart-serial element that is configured as server, it's broadcasted to all connected clients. So maybe there are no clients connected on the connection you are using...

View Question
3 Votes Selected edited answer

Hi Thijs, I'm afraid there is no other way to distinguish between a fail and success ScriptAbortException. Both ExitSuccess() and ExitFail() only seem to set the message in the exception, so there is...

View Question
3 Votes Selected

Hi Koen, I think you'll indeed need an ad-hoc data source to access the (custom) properties of bookings. A few examples can be found on GitHub: https://github.com/SkylineCommunications/SLC-GQIDS-BookingsWithProperties

View Question

Hi Jeroen, The element should contain a table from which a DVE is created for every row. That table has a column that contains the element ID of the DVE. Probably you could use the rows in that table...

View Question
3 Votes Selected

Hi Samson, When DataMiner needs to interact with a third-party device or system this is typically being done using a connector. In that connector you can send and receive data and store the results in...

View Question
3 Votes Selected

Hi Sebastian, As far as I know this is not possible. The HTML would also not be rendered if the automation script was being run from Cube. Feel free to post a feature suggestion for this. It would indeed...

View Question
3 Votes Selected

Hi Pawel, Let me try to answer your questions: Your code will probably work, but better would be to construct the whole object before calling the Build() method. The SetFieldValue method can be replaced...

View Question
3 Votes Selected

Hi Alex, the device should indeed not send the same binding twice, and unfortunately this is causing problems the code that parses the trap. I've quickly fixed it in the Skyline.DataMiner.Utils.SNMP.Traps.Protocol...

View Question
3 Votes Selected

Hi Paul, This is the full list of protocol types. Will also add this to the documentation. 1 - SNMP 2 - Serial 3 - Smart-serial 4 - Virtual 5 - GPIB 6 - OPC 7 - SLA 8 - SNMPv2 9 - SNMPv3 10 - HTTP 11...

View Question

Hi Aditiben, To show all values in a dictionary you could use the DropDown component. Create the dropdown control and add it to the UI: var dropdown = new DropDown(); dropdown.Options = new[] { "Option...

View Question

Hi Mieke, A datetime parameter is internally stored as an "OLE Automation date" (double) that is defined as follows: An OLE Automation date is implemented as a floating-point number whose integral component...

View Question

Hi Mieke, I’m not aware of a way to retrieve this data directly from the database. That would also depend on the type of database being used. Instead of retrieving the table cells one by one, you could...

View Question
3 Votes Selected

Hi, what you noticed is looks like a bug. Changing the visibility of separators is probably not supported yet. Would propose to create an internal task to have this solved.

View Question
3 Votes Selected

Hi Apurva, It's indeed currently not very straightforward to use the DMS classes in a GQI data source. The trick is to create a class that implements the ICommunication interface. This can be found here....

View Question
3 Votes Selected

Hi Robin, this is actually an internal error that happens within DIS which is not necessarily caused by something in your connector or QActions. Would it please be possible to check if you have the latest...

View Question
3 Votes

Hi, in an automation script you have the flexibility of running any C# code. In this case I think it's preferred to make use of the API methods provided by Amazon AWS itself. Some code examples can be...

View Question
3 Votes Selected

Hi German, As far as I'm aware, it's currently not possible to close the popup window of an interactive automation script. This is by design, the window remains open while the interactive script is running....

View Question

Hi Koen, it looks like some DLLs are missing in the "C:\Skyline DataMiner\ProtocolScripts\" folder. The Newtonsoft and Json* types require the Newtonsoft.Json.dll file. If NuGet packages were used in one...

View Question
3 Votes

Hi Thato, it's great to see your interest in the Arista DataMiner connector! Will try to answer your questions: The "Save Run. Config" button can be used to save the running configuration to the startup...

View Question
3 Votes Selected

Hi Diego, That parameter is being copied from the "Signal Noise" column (PID 1602) in "Signal Quality Table". The OID is 1.3.6.1.2.1.10.127.1.1.4.1.5.

View Question
3 Votes Selected

Hi Arne, what's the timeout time that is currently configured on the element? Maybe try to increase that value, to see if that solves the problem. If it does, you could use <Session ignoreTimeout="">...

View Question

Hi Koen, it's strange that there were no other alarms besides the element state itself. Maybe as a first step you could look in the alarm template which other parameters have a threshold defined for the...

View Question
3 Votes Selected

Would create a connector for this use case. In a QAction you could spin up a new thread that keeps collecting new events. New events are stored in a (concurrent) queue, using your code in the question....

View Question

Hi Simone, that can be done relatively easy using the class library: var dms = engine.GetDms(); var e = dms.GetElement("MyElement"); var isInView = IsInView(e, "MyView"); public bool IsInView(IDmsElement...

View Question

The protocol.GetParameter() method call returns the value as string, but stops at the first zero byte (0x00). The following method can be used to retrieve the raw bytes that were received: public static...

View Question
3 Votes Selected

Hi Henrique. I don't know if there is a way add the IP address next to the element names in the surveyor. But if you open a card of a view, and go the the "below this view" section, you can find a list...

View Question

This kind of exceptions typically occur when not all updates of Visual Studio are installed. Would it please be possible to check if there are updates available? These are currently the latest version:...

View Question

Hi Fenta, At first sight there is indeed no specific call to retrieve "HostRuntimeInfo". But he page you are referring to mentions that it is a property of the HostListSummary and HostSystem classes. HostSystem...

View Question

Hi Stacey, since you are already working with the trapInfo object (allBindingInfo), you could use the TrapInfo.FromTrapData(trapInfo) method to parse the data. Then the 'object name' should be available...

View Question
2 Votes Selected

Hi Santiago, I'm not aware of a way to sort descending instead of ascending. A possible workaround is to add an additional (hidden) column with the values in opposite order to sort on.

View Question
2 Votes

Hi German, Your code seems fine at first sight. Multiple subscriptions/watchers is supported. The source of the changes for the realtime updates in an ad-hoc data source actially doesn't matter. How...

View Question

Hi Carlos, Since the GetNextPage method might be called multiple times to retrieve several pages, I think it's not recommended to subscribe and unsubscribe in that method. I also don't immediately see...

View Question

Hi Stijn, That error probably means the BPA assembly was not signed. The (internal) procedure to get a BPA signed can be found here.

View Question
Load more answers