SkyNet

Description

This plugin is created to do different distributed computations. Primary reason to create this plugin is to check unit tests much faster than my NUnit runner. You can create cs script and use existing SkyNet runner to run it on the set of PC.
It looks like you can start agents and server on linux pc with installed mono.
For now, this plugin is still in development. But you can try it :)

Settings

On the first page you can add new tasks, specify script for it and set parameters.

skynet-settings-1.png

On the second page you can manage agent. To work with SkyNet you must install it. Here you should specify sky net server url.

skynet-settings-2.png

On the third page you can install and configure SkyNet server.
Before start work, please verify that your firewall have all specified ports opened.

skynet-settings-3.png

On the forth page you can press Refresh button and see current status.

skynet-settings-4.png

Usage

You can start the new task from the tray menu. On the first tab you can see what script you use and set script parameters.

skynet-usage-1.png

On the second page you can see current status.

skynet-usage-2.png

If you have configured all properly. Than when you press start button, you will see progress and after some time you will see results. For example:

skynet-usage-3.png

Script specification

You can find scripts on the folder: TBoxFolder\Data\SkyNet. You can create and add your own scripts.
For now, we have one script to run Nunit tests and other to calc factorial of the big number.

    public class SkyAgentWork
    {
        public ServerAgent Agent { get; set; }
        public string Config { get; set; }
        public string Report { get; set; }
        public bool IsFailed { get; set; }
    }

    [DataContract]
    public class ServerAgent
    {
        [DataMember]
        public string Endpoint { get; set; }
        [DataMember]
        public int TotalCores { get; set; }
        [DataMember]
        public AgentState State { get; set; }
    }

public interface ISkyScript{
        string DataFolderPath { get; set; }
        string[] PathMasksToInclude { get; set; }
        // this part will be executed on the server
        #region Server
        //this method should return  agentsData for the each agent
        IList<SkyAgentWork> ServerBuildAgentsData(string workingDirectory, IList<ServerAgent> agents);
        //this method should return report by agentData and agentReport for the each agent
        string ServerBuildResultByAgentResults(IList<SkyAgentWork> results);
        #endregion Server
        // this part will be executed on the each agent
        #region Agent
        //this method should return report
        string AgentExecute(string workingDirectory, string agentData, ISkyContext context);
        #endregion Agent
}

Last edited Jun 15, 2014 at 7:52 PM by mnk92, version 13