Profile

Tom Waterbley

User info

First name Tom
Last name Waterbley

DevOps Program

Acquired rank
Enabler
Points progress
Number of DevOps Professional Points
11415 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
11 Votes Selected edited answer

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
8 Votes Selected edited answer

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 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

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 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
3 Votes Selected edited answer

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
3 Votes Selected edited answer

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
3 Votes Selected edited answer

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 Baranisudha, The GetParameterMessage also requires the DMA ID and element ID. Could you please try again after adding these as well to the request message?

View Question
2 Votes Selected

Hi, FolderBrowserDialog cannot be used in an IAS, since that runs on the server and not on the client itself. Your code would try to open the FolderBrowserDialog on the DataMiner server. What you could...

View Question
2 Votes

Hi Estaban, The DMA uptime can be found in DataMinerPerformanceInfoEventMessage according to this answer. Here you can find an example of how it can be retrieved.

View Question
2 Votes Selected

Hi Thomas, To get rid of the input parameters, you could add an extra column with a random number in your custom operator. Then you could use that new column to sort and take the first row.

View Question
2 Votes Selected

Hi Bernard, The engine object is only available in actual automation scripts. In GQI adhoc data sources and custom operators this is not available. However, there is the possibility to send SLNet messages...

View Question
2 Votes

Hi Mark, HTTP communication in the connector is implemented using multithreaded timers. How that works is explained here: https://docs.dataminer.services/develop/devguide/Connector/AdvancedMultithreadedTimersHttp.html....

View Question

Hi Aditiben, the difference between Postman and DataMiner seems to be the TLS version that is being used for the request. Postman uses TLS 1.3, while Dataminer tries to connect using TLS1.2 and TLS1.1....

View Question

Hi Marieke, See https://serverfault.com/questions/420462/performance-counter-disk-time-and-avg-disk-queue-length. This behavior can occur because some controllers allow the operating system to use overlapping...

View Question
2 Votes Selected edited answer

Hi Nick, The class DynamicTableIndicesResponse indeed seems to be missing in the documentation. We will fix that. In the meantime I can already provide a bit more information. The DynamicTableIndicesResponse...

View Question
2 Votes Selected edited answer

Hi Miguel, According to this page in the documentation you can also load GeoJSON objects from HTTP and HTTPS sources, in addition to files. Maybe you could use a user defined API to load the data from...

View Question
2 Votes
Load more answers