You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/09/09 03:27:13 UTC

[45/52] ignite git commit: Web Console beta-3.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java
deleted file mode 100644
index bf0903a..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentClusterDemo.java
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.Random;
-import java.util.Set;
-import java.util.concurrent.Executors;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.concurrent.atomic.AtomicInteger;
-import org.apache.ignite.Ignite;
-import org.apache.ignite.IgniteCache;
-import org.apache.ignite.Ignition;
-import org.apache.ignite.cache.CacheAtomicityMode;
-import org.apache.ignite.cache.QueryEntity;
-import org.apache.ignite.cache.QueryIndex;
-import org.apache.ignite.cache.QueryIndexType;
-import org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction;
-import org.apache.ignite.configuration.CacheConfiguration;
-import org.apache.ignite.configuration.IgniteConfiguration;
-import org.apache.ignite.console.agent.AgentConfiguration;
-import org.apache.ignite.console.demo.model.Car;
-import org.apache.ignite.console.demo.model.Country;
-import org.apache.ignite.console.demo.model.Department;
-import org.apache.ignite.console.demo.model.Employee;
-import org.apache.ignite.console.demo.model.Parking;
-import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.logger.log4j.Log4JLogger;
-import org.apache.ignite.spi.communication.tcp.TcpCommunicationSpi;
-import org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi;
-import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
-import org.apache.ignite.transactions.Transaction;
-import org.apache.log4j.Logger;
-
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_ATOMIC_CACHE_DELETE_HISTORY_SIZE;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_PERFORMANCE_SUGGESTIONS_DISABLED;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_UPDATE_NOTIFIER;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_JETTY_PORT;
-import static org.apache.ignite.IgniteSystemProperties.IGNITE_NO_ASCII;
-import static org.apache.ignite.events.EventType.EVTS_DISCOVERY;
-import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_REST_JETTY_ADDRS;
-import static org.apache.ignite.internal.IgniteNodeAttributes.ATTR_REST_JETTY_PORT;
-import static org.apache.ignite.transactions.TransactionConcurrency.PESSIMISTIC;
-import static org.apache.ignite.transactions.TransactionIsolation.REPEATABLE_READ;
-
-/**
- * Demo for cluster features like SQL and Monitoring.
- *
- * Cache will be created and populated with data to query.
- */
-public class AgentClusterDemo {
-    /** */
-    private static final Logger log = Logger.getLogger(AgentClusterDemo.class.getName());
-
-    /** */
-    private static final AtomicBoolean initLatch = new AtomicBoolean();
-
-    /** */
-    private static final int NODE_CNT = 3;
-
-    /** */
-    private static final String COUNTRY_CACHE_NAME = "CountryCache";
-
-    /** */
-    private static final String DEPARTMENT_CACHE_NAME = "DepartmentCache";
-
-    /** */
-    private static final String EMPLOYEE_CACHE_NAME = "EmployeeCache";
-
-    /** */
-    private static final String PARKING_CACHE_NAME = "ParkingCache";
-
-    /** */
-    private static final String CAR_CACHE_NAME = "CarCache";
-
-    /** */
-    private static final Set<String> DEMO_CACHES = new HashSet<>(Arrays.asList(COUNTRY_CACHE_NAME,
-        DEPARTMENT_CACHE_NAME, EMPLOYEE_CACHE_NAME, PARKING_CACHE_NAME, CAR_CACHE_NAME));
-
-    /** */
-    private static final Random rnd = new Random();
-
-    /** Countries count. */
-    private static final int CNTR_CNT = 10;
-
-    /** Departments count */
-    private static final int DEP_CNT = 100;
-
-    /** Employees count. */
-    private static final int EMPL_CNT = 1000;
-
-    /** Countries count. */
-    private static final int CAR_CNT = 100;
-
-    /** Departments count */
-    private static final int PARK_CNT = 10;
-
-    /** Counter for threads in pool. */
-    private static final AtomicInteger THREAD_CNT = new AtomicInteger(0);
-
-    /**
-     * Create base cache configuration.
-     *
-     * @param name cache name.
-     * @return Cache configuration with basic properties set.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheConfiguration(String name) {
-        CacheConfiguration<K, V> ccfg = new CacheConfiguration<>(name);
-
-        ccfg.setAffinity(new RendezvousAffinityFunction(false, 32));
-        ccfg.setStartSize(100);
-        ccfg.setStatisticsEnabled(true);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure cacheCountry.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheCountry() {
-        CacheConfiguration<K, V> ccfg = cacheConfiguration(COUNTRY_CACHE_NAME);
-
-        // Configure cacheCountry types.
-        Collection<QueryEntity> qryEntities = new ArrayList<>();
-
-        // COUNTRY.
-        QueryEntity type = new QueryEntity();
-
-        qryEntities.add(type);
-
-        type.setKeyType(Integer.class.getName());
-        type.setValueType(Country.class.getName());
-
-        // Query fields for COUNTRY.
-        LinkedHashMap<String, String> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("id", "java.lang.Integer");
-        qryFlds.put("name", "java.lang.String");
-        qryFlds.put("population", "java.lang.Integer");
-
-        type.setFields(qryFlds);
-
-        ccfg.setQueryEntities(qryEntities);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure cacheEmployee.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheDepartment() {
-        CacheConfiguration<K, V> ccfg = cacheConfiguration(DEPARTMENT_CACHE_NAME);
-
-        // Configure cacheDepartment types.
-        Collection<QueryEntity> qryEntities = new ArrayList<>();
-
-        // DEPARTMENT.
-        QueryEntity type = new QueryEntity();
-
-        qryEntities.add(type);
-
-        type.setKeyType(Integer.class.getName());
-        type.setValueType(Department.class.getName());
-
-        // Query fields for DEPARTMENT.
-        LinkedHashMap<String, String> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("id", "java.lang.Integer");
-        qryFlds.put("countryId", "java.lang.Integer");
-        qryFlds.put("name", "java.lang.String");
-
-        type.setFields(qryFlds);
-
-        ccfg.setQueryEntities(qryEntities);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure cacheEmployee.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheEmployee() {
-        CacheConfiguration<K, V> ccfg = cacheConfiguration(EMPLOYEE_CACHE_NAME);
-
-        ccfg.setAtomicityMode(CacheAtomicityMode.TRANSACTIONAL);
-        ccfg.setBackups(1);
-
-        // Configure cacheEmployee types.
-        Collection<QueryEntity> qryEntities = new ArrayList<>();
-
-        // EMPLOYEE.
-        QueryEntity type = new QueryEntity();
-
-        qryEntities.add(type);
-
-        type.setKeyType(Integer.class.getName());
-        type.setValueType(Employee.class.getName());
-
-        // Query fields for EMPLOYEE.
-        LinkedHashMap<String, String> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("id", "java.lang.Integer");
-        qryFlds.put("departmentId", "java.lang.Integer");
-        qryFlds.put("managerId", "java.lang.Integer");
-        qryFlds.put("firstName", "java.lang.String");
-        qryFlds.put("lastName", "java.lang.String");
-        qryFlds.put("email", "java.lang.String");
-        qryFlds.put("phoneNumber", "java.lang.String");
-        qryFlds.put("hireDate", "java.sql.Date");
-        qryFlds.put("job", "java.lang.String");
-        qryFlds.put("salary", "java.lang.Double");
-
-        type.setFields(qryFlds);
-
-        // Indexes for EMPLOYEE.
-        Collection<QueryIndex> indexes = new ArrayList<>();
-
-        QueryIndex idx = new QueryIndex();
-
-        idx.setName("EMP_NAMES");
-        idx.setIndexType(QueryIndexType.SORTED);
-        LinkedHashMap<String, Boolean> indFlds = new LinkedHashMap<>();
-
-        indFlds.put("firstName", Boolean.FALSE);
-        indFlds.put("lastName", Boolean.FALSE);
-
-        idx.setFields(indFlds);
-
-        indexes.add(idx);
-        indexes.add(new QueryIndex("salary", QueryIndexType.SORTED, false, "EMP_SALARY"));
-
-        type.setIndexes(indexes);
-
-        ccfg.setQueryEntities(qryEntities);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure cacheEmployee.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheParking() {
-        CacheConfiguration<K, V> ccfg = cacheConfiguration(PARKING_CACHE_NAME);
-
-        // Configure cacheParking types.
-        Collection<QueryEntity> qryEntities = new ArrayList<>();
-
-        // PARKING.
-        QueryEntity type = new QueryEntity();
-
-        qryEntities.add(type);
-
-        type.setKeyType(Integer.class.getName());
-        type.setValueType(Parking.class.getName());
-
-        // Query fields for PARKING.
-        LinkedHashMap<String, String> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("id", "java.lang.Integer");
-        qryFlds.put("name", "java.lang.String");
-        qryFlds.put("capacity", "java.lang.Integer");
-
-        type.setFields(qryFlds);
-
-        ccfg.setQueryEntities(qryEntities);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure cacheEmployee.
-     */
-    private static <K, V> CacheConfiguration<K, V> cacheCar() {
-        CacheConfiguration<K, V> ccfg = cacheConfiguration(CAR_CACHE_NAME);
-
-        // Configure cacheCar types.
-        Collection<QueryEntity> qryEntities = new ArrayList<>();
-
-        // CAR.
-        QueryEntity type = new QueryEntity();
-
-        qryEntities.add(type);
-
-        type.setKeyType(Integer.class.getName());
-        type.setValueType(Car.class.getName());
-
-        // Query fields for CAR.
-        LinkedHashMap<String, String> qryFlds = new LinkedHashMap<>();
-
-        qryFlds.put("id", "java.lang.Integer");
-        qryFlds.put("parkingId", "java.lang.Integer");
-        qryFlds.put("name", "java.lang.String");
-
-        type.setFields(qryFlds);
-
-        ccfg.setQueryEntities(qryEntities);
-
-        return ccfg;
-    }
-
-    /**
-     * Configure node.
-     * @param gridIdx Grid name index.
-     * @param client If {@code true} then start client node.
-     * @return IgniteConfiguration
-     */
-    private static  IgniteConfiguration igniteConfiguration(int gridIdx, boolean client) {
-        IgniteConfiguration cfg = new IgniteConfiguration();
-
-        cfg.setGridName((client ? "demo-server-" : "demo-client-") + gridIdx);
-        cfg.setLocalHost("127.0.0.1");
-        cfg.setIncludeEventTypes(EVTS_DISCOVERY);
-
-        TcpDiscoveryVmIpFinder ipFinder = new TcpDiscoveryVmIpFinder();
-
-        ipFinder.setAddresses(Collections.singletonList("127.0.0.1:60900.." + (60900 + NODE_CNT - 1)));
-
-        // Configure discovery SPI.
-        TcpDiscoverySpi discoSpi = new TcpDiscoverySpi();
-
-        discoSpi.setLocalPort(60900);
-        discoSpi.setIpFinder(ipFinder);
-
-        cfg.setDiscoverySpi(discoSpi);
-
-        TcpCommunicationSpi commSpi = new TcpCommunicationSpi();
-
-        commSpi.setSharedMemoryPort(-1);
-        commSpi.setLocalPort(60800);
-
-        cfg.setCommunicationSpi(commSpi);
-        cfg.setGridLogger(new Log4JLogger(log));
-        cfg.setMetricsLogFrequency(0);
-        cfg.getConnectorConfiguration().setPort(60700);
-
-        if (client)
-            cfg.setClientMode(true);
-
-        cfg.setCacheConfiguration(cacheCountry(), cacheDepartment(), cacheEmployee(), cacheParking(), cacheCar());
-
-        return cfg;
-    }
-
-    /**
-     * @param val Value to round.
-     * @param places Numbers after point.
-     * @return Rounded value;
-     */
-    private static double round(double val, int places) {
-        if (places < 0)
-            throw new IllegalArgumentException();
-
-        long factor = (long)Math.pow(10, places);
-
-        val *= factor;
-
-        long tmp = Math.round(val);
-
-        return (double)tmp / factor;
-    }
-
-    /**
-     * @param ignite Ignite.
-     * @param range Time range in milliseconds.
-     */
-    private static void populateCacheEmployee(Ignite ignite, long range) {
-        if (log.isDebugEnabled())
-            log.debug("DEMO: Start employees population with data...");
-
-        IgniteCache<Integer, Country> cacheCountry = ignite.cache(COUNTRY_CACHE_NAME);
-
-        for (int i = 0, n = 1; i < CNTR_CNT; i++, n++)
-            cacheCountry.put(i, new Country(i, "Country #" + n, n * 10000000));
-
-        IgniteCache<Integer, Department> cacheDepartment = ignite.cache(DEPARTMENT_CACHE_NAME);
-
-        IgniteCache<Integer, Employee> cacheEmployee = ignite.cache(EMPLOYEE_CACHE_NAME);
-
-        for (int i = 0, n = 1; i < DEP_CNT; i++, n++) {
-            cacheDepartment.put(i, new Department(n, rnd.nextInt(CNTR_CNT), "Department #" + n));
-
-            double r = rnd.nextDouble();
-
-            cacheEmployee.put(i, new Employee(i, rnd.nextInt(DEP_CNT), null, "First name manager #" + n,
-                "Last name manager #" + n, "Email manager #" + n, "Phone number manager #" + n,
-                new java.sql.Date((long)(r * range)), "Job manager #" + n, 1000 + round(r * 4000, 2)));
-        }
-
-        for (int i = 0, n = 1; i < EMPL_CNT; i++, n++) {
-            Integer depId = rnd.nextInt(DEP_CNT);
-
-            double r = rnd.nextDouble();
-
-            cacheEmployee.put(i, new Employee(i, depId, depId, "First name employee #" + n,
-                "Last name employee #" + n, "Email employee #" + n, "Phone number employee #" + n,
-                new java.sql.Date((long)(r * range)), "Job employee #" + n, 500 + round(r * 2000, 2)));
-        }
-
-        if (log.isDebugEnabled())
-            log.debug("DEMO: Finished employees population.");
-    }
-
-    /**
-     * @param ignite Ignite.
-     */
-    private static void populateCacheCar(Ignite ignite) {
-        if (log.isDebugEnabled())
-            log.debug("DEMO: Start cars population...");
-
-        IgniteCache<Integer, Parking> cacheParking = ignite.cache(PARKING_CACHE_NAME);
-
-        for (int i = 0, n = 1; i < PARK_CNT; i++, n++)
-            cacheParking.put(i, new Parking(i, "Parking #" + n, n * 10));
-
-        IgniteCache<Integer, Car> cacheCar = ignite.cache(CAR_CACHE_NAME);
-
-        for (int i = 0, n = 1; i < CAR_CNT; i++, n++)
-            cacheCar.put(i, new Car(i, rnd.nextInt(PARK_CNT), "Car #" + n));
-
-        if (log.isDebugEnabled())
-            log.debug("DEMO: Finished cars population.");
-    }
-
-    /**
-     * Creates a thread pool that can schedule commands to run after a given delay, or to execute periodically.
-     *
-     * @param corePoolSize Number of threads to keep in the pool, even if they are idle.
-     * @param threadName Part of thread name that would be used by thread factory.
-     * @return Newly created scheduled thread pool.
-     */
-    private static ScheduledExecutorService newScheduledThreadPool(int corePoolSize, final String threadName) {
-        ScheduledExecutorService srvc = Executors.newScheduledThreadPool(corePoolSize, new ThreadFactory() {
-            @Override public Thread newThread(Runnable r) {
-                Thread thread = new Thread(r, String.format("%s-%d", threadName, THREAD_CNT.getAndIncrement()));
-
-                thread.setDaemon(true);
-
-                return thread;
-            }
-        });
-
-        ScheduledThreadPoolExecutor executor = (ScheduledThreadPoolExecutor)srvc;
-
-        // Setting up shutdown policy.
-        executor.setExecuteExistingDelayedTasksAfterShutdownPolicy(false);
-        executor.setContinueExistingPeriodicTasksAfterShutdownPolicy(false);
-
-        return srvc;
-    }
-
-    /**
-     * Starts read and write from cache in background.
-     *
-     * @param ignite Ignite.
-     * @param cnt - maximum count read/write key
-     */
-    private static void startLoad(final Ignite ignite, final int cnt) {
-        final long diff = new java.util.Date().getTime();
-
-        populateCacheEmployee(ignite, diff);
-        populateCacheCar(ignite);
-
-        ScheduledExecutorService cachePool = newScheduledThreadPool(2, "demo-sql-load-cache-tasks");
-
-        cachePool.scheduleWithFixedDelay(new Runnable() {
-            @Override public void run() {
-                try {
-                    for (String cacheName : ignite.cacheNames()) {
-                        if (!DEMO_CACHES.contains(cacheName)) {
-                            IgniteCache<Integer, String> otherCache = ignite.cache(cacheName);
-
-                            if (otherCache != null) {
-                                for (int i = 0, n = 1; i < cnt; i++, n++) {
-                                    Integer key = rnd.nextInt(1000);
-
-                                    String val = otherCache.get(key);
-
-                                    if (val == null)
-                                        otherCache.put(key, "other-" + key);
-                                    else if (rnd.nextInt(100) < 30)
-                                        otherCache.remove(key);
-                                }
-                            }
-                        }
-                    }
-
-                    IgniteCache<Integer, Employee> cacheEmployee = ignite.cache(EMPLOYEE_CACHE_NAME);
-
-                    if (cacheEmployee != null)
-                        try(Transaction tx = ignite.transactions().txStart(PESSIMISTIC, REPEATABLE_READ)) {
-                            for (int i = 0, n = 1; i < cnt; i++, n++) {
-                                Integer id = rnd.nextInt(EMPL_CNT);
-
-                                Integer depId = rnd.nextInt(DEP_CNT);
-
-                                double r = rnd.nextDouble();
-
-                                cacheEmployee.put(id, new Employee(id, depId, depId, "First name employee #" + n,
-                                    "Last name employee #" + n, "Email employee #" + n, "Phone number employee #" + n,
-                                    new java.sql.Date((long)(r * diff)), "Job employee #" + n, 500 + round(r * 2000, 2)));
-
-                                if (rnd.nextBoolean())
-                                    cacheEmployee.remove(rnd.nextInt(EMPL_CNT));
-
-                                cacheEmployee.get(rnd.nextInt(EMPL_CNT));
-                            }
-
-                            if (rnd.nextInt(100) > 20)
-                                tx.commit();
-                        }
-                }
-                catch (Throwable e) {
-                    if (!e.getMessage().contains("cache is stopped"))
-                        ignite.log().error("Cache write task execution error", e);
-                }
-            }
-        }, 10, 3, TimeUnit.SECONDS);
-
-        cachePool.scheduleWithFixedDelay(new Runnable() {
-            @Override public void run() {
-                try {
-                    IgniteCache<Integer, Car> cache = ignite.cache(CAR_CACHE_NAME);
-
-                    if (cache != null)
-                        for (int i = 0; i < cnt; i++) {
-                            Integer carId = rnd.nextInt(CAR_CNT);
-
-                            cache.put(carId, new Car(carId, rnd.nextInt(PARK_CNT), "Car #" + (i + 1)));
-
-                            if (rnd.nextBoolean())
-                                cache.remove(rnd.nextInt(CAR_CNT));
-                        }
-                }
-                catch (IllegalStateException ignored) {
-                    // No-op.
-                }
-                catch (Throwable e) {
-                    if (!e.getMessage().contains("cache is stopped"))
-                        ignite.log().error("Cache write task execution error", e);
-                }
-            }
-        }, 10, 3, TimeUnit.SECONDS);
-    }
-
-    /**
-     * Start ignite node with cacheEmployee and populate it with data.
-     */
-    public static boolean testDrive(AgentConfiguration acfg) {
-        if (initLatch.compareAndSet(false, true)) {
-            log.info("DEMO: Starting embedded nodes for demo...");
-
-            System.setProperty(IGNITE_ATOMIC_CACHE_DELETE_HISTORY_SIZE, "1");
-            System.setProperty(IGNITE_PERFORMANCE_SUGGESTIONS_DISABLED, "true");
-            System.setProperty(IGNITE_UPDATE_NOTIFIER, "false");
-
-            System.setProperty(IGNITE_JETTY_PORT, "60800");
-            System.setProperty(IGNITE_NO_ASCII, "true");
-
-            try {
-                IgniteEx ignite = (IgniteEx)Ignition.start(igniteConfiguration(0, false));
-
-                final AtomicInteger cnt = new AtomicInteger(0);
-
-                final ScheduledExecutorService execSrv = Executors.newSingleThreadScheduledExecutor();
-
-                execSrv.scheduleAtFixedRate(new Runnable() {
-                    @Override public void run() {
-                        int idx = cnt.incrementAndGet();
-
-                        try {
-                            Ignition.start(igniteConfiguration(idx, idx == NODE_CNT));
-                        }
-                        catch (Throwable e) {
-                            log.error("DEMO: Failed to start embedded node: " + e.getMessage());
-                        }
-                        finally {
-                            if (idx == NODE_CNT)
-                                execSrv.shutdown();
-                        }
-                    }
-                }, 10, 10, TimeUnit.SECONDS);
-
-                if (log.isDebugEnabled())
-                    log.debug("DEMO: Started embedded nodes with indexed enabled caches...");
-
-                Collection<String> jettyAddrs = ignite.localNode().attribute(ATTR_REST_JETTY_ADDRS);
-
-                String host = jettyAddrs == null ? null : jettyAddrs.iterator().next();
-
-                Integer port = ignite.localNode().attribute(ATTR_REST_JETTY_PORT);
-
-                if (F.isEmpty(host) || port == null) {
-                    log.error("DEMO: Failed to start embedded node with rest!");
-
-                    return false;
-                }
-
-                acfg.demoNodeUri(String.format("http://%s:%d", host, port));
-
-                log.info("DEMO: Embedded nodes for sql and monitoring demo successfully started");
-
-                startLoad(ignite, 20);
-            }
-            catch (Exception e) {
-                log.error("DEMO: Failed to start embedded node for sql and monitoring demo!", e);
-
-                return false;
-            }
-        }
-
-        return true;
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentMetadataDemo.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentMetadataDemo.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentMetadataDemo.java
deleted file mode 100644
index 4683dd8..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/AgentMetadataDemo.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo;
-
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.SQLException;
-import java.util.concurrent.atomic.AtomicBoolean;
-import org.apache.log4j.Logger;
-import org.h2.tools.RunScript;
-import org.h2.tools.Server;
-
-import static org.apache.ignite.console.agent.AgentUtils.resolvePath;
-
-/**
- * Demo for metadata load from database.
- *
- * H2 database will be started and several tables will be created.
- */
-public class AgentMetadataDemo {
-    /** */
-    private static final Logger log = Logger.getLogger(AgentMetadataDemo.class.getName());
-
-    /** */
-    private static final AtomicBoolean initLatch = new AtomicBoolean();
-
-    /**
-     * @param jdbcUrl Connection url.
-     * @return true if url is used for test-drive.
-     */
-    public static boolean isTestDriveUrl(String jdbcUrl) {
-        return "jdbc:h2:mem:demo-db".equals(jdbcUrl);
-    }
-
-    /**
-     * Start H2 database and populate it with several tables.
-     */
-    public static Connection testDrive() throws SQLException {
-        if (initLatch.compareAndSet(false, true)) {
-            log.info("DEMO: Prepare in-memory H2 database...");
-
-            try {
-                Connection conn = DriverManager.getConnection("jdbc:h2:mem:demo-db;DB_CLOSE_DELAY=-1", "sa", "");
-
-                File sqlScript = resolvePath("demo/db-init.sql");
-
-                //noinspection ConstantConditions
-                RunScript.execute(conn, new FileReader(sqlScript));
-
-                log.info("DEMO: Sample tables created.");
-
-                conn.close();
-
-                Server.createTcpServer("-tcpDaemon").start();
-
-                log.info("DEMO: TcpServer stared.");
-
-                log.info("DEMO: JDBC URL for test drive metadata load: jdbc:h2:mem:demo-db");
-            }
-            catch (SQLException e) {
-                log.error("DEMO: Failed to start test drive for metadata!", e);
-
-                throw e;
-            }
-            catch (FileNotFoundException | NullPointerException e) {
-                log.error("DEMO: Failed to find demo database init script file: demo/db-init.sql");
-
-                throw new SQLException("Failed to start demo for metadata", e);
-            }
-        }
-
-        return DriverManager.getConnection("jdbc:h2:mem:demo-db;DB_CLOSE_DELAY=-1", "sa", "");
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Car.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Car.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Car.java
deleted file mode 100644
index f351efc..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Car.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo.model;
-
-import java.io.Serializable;
-
-/**
- * Car definition.
- */
-public class Car implements Serializable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Value for id. */
-    private int id;
-
-    /** Value for parkingId. */
-    private int parkingId;
-
-    /** Value for name. */
-    private String name;
-
-    /**
-     * Empty constructor.
-     */
-    public Car() {
-        // No-op.
-    }
-
-    /**
-     * Full constructor.
-     */
-    public Car(
-        int id,
-        int parkingId,
-        String name
-    ) {
-        this.id = id;
-        this.parkingId = parkingId;
-        this.name = name;
-    }
-
-    /**
-     * Gets id.
-     *
-     * @return Value for id.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets id.
-     *
-     * @param id New value for id.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Gets parkingId.
-     *
-     * @return Value for parkingId.
-     */
-    public int getParkingId() {
-        return parkingId;
-    }
-
-    /**
-     * Sets parkingId.
-     *
-     * @param parkingId New value for parkingId.
-     */
-    public void setParkingId(int parkingId) {
-        this.parkingId = parkingId;
-    }
-
-    /**
-     * Gets name.
-     *
-     * @return Value for name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets name.
-     *
-     * @param name New value for name.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        
-        if (!(o instanceof Car))
-            return false;
-
-        Car that = (Car)o;
-
-        if (id != that.id)
-            return false;
-
-        if (parkingId != that.parkingId)
-            return false;
-
-        if (name != null ? !name.equals(that.name) : that.name != null)
-            return false;
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = id;
-
-        res = 31 * res + parkingId;
-
-        res = 31 * res + (name != null ? name.hashCode() : 0);
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return "Car [id=" + id +
-            ", parkingId=" + parkingId +
-            ", name=" + name +
-            ']';
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Country.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Country.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Country.java
deleted file mode 100644
index 348928b..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Country.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo.model;
-
-import java.io.Serializable;
-
-/**
- * Country definition.
- */
-public class Country implements Serializable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Value for id. */
-    private int id;
-
-    /** Value for name. */
-    private String name;
-
-    /** Value for population. */
-    private int population;
-
-    /**
-     * Empty constructor.
-     */
-    public Country() {
-        // No-op.
-    }
-
-    /**
-     * Full constructor.
-     */
-    public Country(
-        int id,
-        String name,
-        int population
-    ) {
-        this.id = id;
-        this.name = name;
-        this.population = population;
-    }
-
-    /**
-     * Gets id.
-     *
-     * @return Value for id.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets id.
-     *
-     * @param id New value for id.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Gets name.
-     *
-     * @return Value for name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets name.
-     *
-     * @param name New value for name.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Gets population.
-     *
-     * @return Value for population.
-     */
-    public int getPopulation() {
-        return population;
-    }
-
-    /**
-     * Sets population.
-     *
-     * @param population New value for population.
-     */
-    public void setPopulation(int population) {
-        this.population = population;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        
-        if (!(o instanceof Country))
-            return false;
-
-        Country that = (Country)o;
-
-        if (id != that.id)
-            return false;
-
-        if (name != null ? !name.equals(that.name) : that.name != null)
-            return false;
-
-        if (population != that.population)
-            return false;
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = id;
-
-        res = 31 * res + (name != null ? name.hashCode() : 0);
-
-        res = 31 * res + population;
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return "Country [id=" + id +
-            ", name=" + name +
-            ", population=" + population +
-            ']';
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Department.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Department.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Department.java
deleted file mode 100644
index 1c2f3b2..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Department.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo.model;
-
-import java.io.Serializable;
-
-/**
- * Department definition.
- */
-public class Department implements Serializable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Value for id. */
-    private int id;
-
-    /** Value for countryId. */
-    private int countryId;
-
-    /** Value for name. */
-    private String name;
-
-    /**
-     * Empty constructor.
-     */
-    public Department() {
-        // No-op.
-    }
-
-    /**
-     * Full constructor.
-     */
-    public Department(
-        int id,
-        int countryId,
-        String name
-    ) {
-        this.id = id;
-        this.countryId = countryId;
-        this.name = name;
-    }
-
-    /**
-     * Gets id.
-     *
-     * @return Value for id.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets id.
-     *
-     * @param id New value for id.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Gets countryId.
-     *
-     * @return Value for countryId.
-     */
-    public int getCountryId() {
-        return countryId;
-    }
-
-    /**
-     * Sets countryId.
-     *
-     * @param countryId New value for countryId.
-     */
-    public void setCountryId(int countryId) {
-        this.countryId = countryId;
-    }
-
-    /**
-     * Gets name.
-     *
-     * @return Value for name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets name.
-     *
-     * @param name New value for name.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        
-        if (!(o instanceof Department))
-            return false;
-
-        Department that = (Department)o;
-
-        if (id != that.id)
-            return false;
-
-        if (countryId != that.countryId)
-            return false;
-
-        if (name != null ? !name.equals(that.name) : that.name != null)
-            return false;
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = id;
-
-        res = 31 * res + countryId;
-
-        res = 31 * res + (name != null ? name.hashCode() : 0);
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return "Department [id=" + id +
-            ", countryId=" + countryId +
-            ", name=" + name +
-            ']';
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Employee.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Employee.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Employee.java
deleted file mode 100644
index a3e7eba..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Employee.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo.model;
-
-import java.io.Serializable;
-import java.sql.Date;
-
-/**
- * Employee definition.
- */
-public class Employee implements Serializable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Value for id. */
-    private int id;
-
-    /** Value for departmentId. */
-    private int departmentId;
-
-    /** Value for managerId. */
-    private Integer managerId;
-
-    /** Value for firstName. */
-    private String firstName;
-
-    /** Value for lastName. */
-    private String lastName;
-
-    /** Value for email. */
-    private String email;
-
-    /** Value for phoneNumber. */
-    private String phoneNumber;
-
-    /** Value for hireDate. */
-    private Date hireDate;
-
-    /** Value for job. */
-    private String job;
-
-    /** Value for salary. */
-    private Double salary;
-
-    /**
-     * Empty constructor.
-     */
-    public Employee() {
-        // No-op.
-    }
-
-    /**
-     * Full constructor.
-     */
-    public Employee(
-        int id,
-        int departmentId,
-        Integer managerId,
-        String firstName,
-        String lastName,
-        String email,
-        String phoneNumber,
-        Date hireDate,
-        String job,
-        Double salary
-    ) {
-        this.id = id;
-        this.departmentId = departmentId;
-        this.managerId = managerId;
-        this.firstName = firstName;
-        this.lastName = lastName;
-        this.email = email;
-        this.phoneNumber = phoneNumber;
-        this.hireDate = hireDate;
-        this.job = job;
-        this.salary = salary;
-    }
-
-    /**
-     * Gets id.
-     *
-     * @return Value for id.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets id.
-     *
-     * @param id New value for id.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Gets departmentId.
-     *
-     * @return Value for departmentId.
-     */
-    public int getDepartmentId() {
-        return departmentId;
-    }
-
-    /**
-     * Sets departmentId.
-     *
-     * @param departmentId New value for departmentId.
-     */
-    public void setDepartmentId(int departmentId) {
-        this.departmentId = departmentId;
-    }
-
-    /**
-     * Gets managerId.
-     *
-     * @return Value for managerId.
-     */
-    public Integer getManagerId() {
-        return managerId;
-    }
-
-    /**
-     * Sets managerId.
-     *
-     * @param managerId New value for managerId.
-     */
-    public void setManagerId(Integer managerId) {
-        this.managerId = managerId;
-    }
-
-    /**
-     * Gets firstName.
-     *
-     * @return Value for firstName.
-     */
-    public String getFirstName() {
-        return firstName;
-    }
-
-    /**
-     * Sets firstName.
-     *
-     * @param firstName New value for firstName.
-     */
-    public void setFirstName(String firstName) {
-        this.firstName = firstName;
-    }
-
-    /**
-     * Gets lastName.
-     *
-     * @return Value for lastName.
-     */
-    public String getLastName() {
-        return lastName;
-    }
-
-    /**
-     * Sets lastName.
-     *
-     * @param lastName New value for lastName.
-     */
-    public void setLastName(String lastName) {
-        this.lastName = lastName;
-    }
-
-    /**
-     * Gets email.
-     *
-     * @return Value for email.
-     */
-    public String getEmail() {
-        return email;
-    }
-
-    /**
-     * Sets email.
-     *
-     * @param email New value for email.
-     */
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    /**
-     * Gets phoneNumber.
-     *
-     * @return Value for phoneNumber.
-     */
-    public String getPhoneNumber() {
-        return phoneNumber;
-    }
-
-    /**
-     * Sets phoneNumber.
-     *
-     * @param phoneNumber New value for phoneNumber.
-     */
-    public void setPhoneNumber(String phoneNumber) {
-        this.phoneNumber = phoneNumber;
-    }
-
-    /**
-     * Gets hireDate.
-     *
-     * @return Value for hireDate.
-     */
-    public Date getHireDate() {
-        return hireDate;
-    }
-
-    /**
-     * Sets hireDate.
-     *
-     * @param hireDate New value for hireDate.
-     */
-    public void setHireDate(Date hireDate) {
-        this.hireDate = hireDate;
-    }
-
-    /**
-     * Gets job.
-     *
-     * @return Value for job.
-     */
-    public String getJob() {
-        return job;
-    }
-
-    /**
-     * Sets job.
-     *
-     * @param job New value for job.
-     */
-    public void setJob(String job) {
-        this.job = job;
-    }
-
-    /**
-     * Gets salary.
-     *
-     * @return Value for salary.
-     */
-    public Double getSalary() {
-        return salary;
-    }
-
-    /**
-     * Sets salary.
-     *
-     * @param salary New value for salary.
-     */
-    public void setSalary(Double salary) {
-        this.salary = salary;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        
-        if (!(o instanceof Employee))
-            return false;
-
-        Employee that = (Employee)o;
-
-        if (id != that.id)
-            return false;
-
-        if (departmentId != that.departmentId)
-            return false;
-
-        if (managerId != null ? !managerId.equals(that.managerId) : that.managerId != null)
-            return false;
-
-        if (firstName != null ? !firstName.equals(that.firstName) : that.firstName != null)
-            return false;
-
-        if (lastName != null ? !lastName.equals(that.lastName) : that.lastName != null)
-            return false;
-
-        if (email != null ? !email.equals(that.email) : that.email != null)
-            return false;
-
-        if (phoneNumber != null ? !phoneNumber.equals(that.phoneNumber) : that.phoneNumber != null)
-            return false;
-
-        if (hireDate != null ? !hireDate.equals(that.hireDate) : that.hireDate != null)
-            return false;
-
-        if (job != null ? !job.equals(that.job) : that.job != null)
-            return false;
-
-        if (salary != null ? !salary.equals(that.salary) : that.salary != null)
-            return false;
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = id;
-
-        res = 31 * res + departmentId;
-
-        res = 31 * res + (managerId != null ? managerId.hashCode() : 0);
-
-        res = 31 * res + (firstName != null ? firstName.hashCode() : 0);
-
-        res = 31 * res + (lastName != null ? lastName.hashCode() : 0);
-
-        res = 31 * res + (email != null ? email.hashCode() : 0);
-
-        res = 31 * res + (phoneNumber != null ? phoneNumber.hashCode() : 0);
-
-        res = 31 * res + (hireDate != null ? hireDate.hashCode() : 0);
-
-        res = 31 * res + (job != null ? job.hashCode() : 0);
-
-        res = 31 * res + (salary != null ? salary.hashCode() : 0);
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return "Employee [id=" + id +
-            ", departmentId=" + departmentId +
-            ", managerId=" + managerId +
-            ", firstName=" + firstName +
-            ", lastName=" + lastName +
-            ", email=" + email +
-            ", phoneNumber=" + phoneNumber +
-            ", hireDate=" + hireDate +
-            ", job=" + job +
-            ", salary=" + salary +
-            ']';
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Parking.java
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Parking.java b/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Parking.java
deleted file mode 100644
index d55ae81..0000000
--- a/modules/web-agent/src/main/java/org/apache/ignite/console/demo/model/Parking.java
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.apache.ignite.console.demo.model;
-
-import java.io.Serializable;
-
-/**
- * Parking definition.
- */
-public class Parking implements Serializable {
-    /** */
-    private static final long serialVersionUID = 0L;
-
-    /** Value for id. */
-    private int id;
-
-    /** Value for name. */
-    private String name;
-
-    /** Value for capacity. */
-    private int capacity;
-
-    /**
-     * Empty constructor.
-     */
-    public Parking() {
-        // No-op.
-    }
-
-    /**
-     * Full constructor.
-     */
-    public Parking(
-        int id,
-        String name,
-        int capacity
-    ) {
-        this.id = id;
-        this.name = name;
-        this.capacity = capacity;
-    }
-
-    /**
-     * Gets id.
-     *
-     * @return Value for id.
-     */
-    public int getId() {
-        return id;
-    }
-
-    /**
-     * Sets id.
-     *
-     * @param id New value for id.
-     */
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    /**
-     * Gets name.
-     *
-     * @return Value for name.
-     */
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * Sets name.
-     *
-     * @param name New value for name.
-     */
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    /**
-     * Gets capacity.
-     *
-     * @return Value for capacity.
-     */
-    public int getCapacity() {
-        return capacity;
-    }
-
-    /**
-     * Sets capacity.
-     *
-     * @param capacity New value for capacity.
-     */
-    public void setCapacity(int capacity) {
-        this.capacity = capacity;
-    }
-
-    /** {@inheritDoc} */
-    @Override public boolean equals(Object o) {
-        if (this == o)
-            return true;
-        
-        if (!(o instanceof Parking))
-            return false;
-
-        Parking that = (Parking)o;
-
-        if (id != that.id)
-            return false;
-
-        if (name != null ? !name.equals(that.name) : that.name != null)
-            return false;
-
-        if (capacity != that.capacity)
-            return false;
-
-        return true;
-    }
-
-    /** {@inheritDoc} */
-    @Override public int hashCode() {
-        int res = id;
-
-        res = 31 * res + (name != null ? name.hashCode() : 0);
-
-        res = 31 * res + capacity;
-
-        return res;
-    }
-
-    /** {@inheritDoc} */
-    @Override public String toString() {
-        return "Parking [id=" + id +
-            ", name=" + name +
-            ", capacity=" + capacity +
-            ']';
-    }
-}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-agent/src/main/resources/log4j.properties
----------------------------------------------------------------------
diff --git a/modules/web-agent/src/main/resources/log4j.properties b/modules/web-agent/src/main/resources/log4j.properties
deleted file mode 100644
index 3b7767c..0000000
--- a/modules/web-agent/src/main/resources/log4j.properties
+++ /dev/null
@@ -1,53 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one or more
-# contributor license agreements.  See the NOTICE file distributed with
-# this work for additional information regarding copyright ownership.
-# The ASF licenses this file to You under the Apache License, Version 2.0
-# (the "License"); you may not use this file except in compliance with
-# the License.  You may obtain a copy of the License at
-#
-#      http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-log4j.rootLogger=INFO,console_err,file
-
-log4j.logger.org.apache.http=WARN
-log4j.logger.org.apache.ignite.spi.checkpoint.noop.NoopCheckpointSpi=OFF
-log4j.logger.org.apache.ignite.spi.swapspace.noop.NoopSwapSpaceSpi=OFF
-log4j.logger.org.apache.ignite.internal.managers.collision.GridCollisionManager=ERROR
-log4j.logger.org.apache.commons.beanutils=WARN
-log4j.logger.sun.net.www.protocol.http=WARN
-
-# Configure console appender.
-log4j.appender.console_err=org.apache.log4j.ConsoleAppender
-log4j.appender.console_err.Threshold=WARN
-log4j.appender.console_err.layout=org.apache.log4j.PatternLayout
-log4j.appender.console_err.layout.ConversionPattern=[%d{ABSOLUTE}][%-5p][%t][%c{1}] %m%n
-
-# Configure console appender.
-log4j.appender.console=org.apache.log4j.ConsoleAppender
-log4j.appender.console.layout=org.apache.log4j.PatternLayout
-log4j.appender.console.layout.ConversionPattern=[%d{ABSOLUTE}][%-5p][%t][%c{1}] %m%n
-log4j.appender.console.filter.a=org.apache.log4j.varia.LevelMatchFilter
-log4j.appender.console.filter.a.LevelToMatch=INFO
-log4j.appender.console.filter.a.AcceptOnMatch=true
-log4j.appender.console.filter.b=org.apache.log4j.varia.LevelMatchFilter
-log4j.appender.console.filter.b.LevelToMatch=ERROR
-log4j.appender.console.filter.b.AcceptOnMatch=false
-log4j.appender.console.filter.c=org.apache.log4j.varia.LevelMatchFilter
-log4j.appender.console.filter.c.LevelToMatch=WARN
-log4j.appender.console.filter.c.AcceptOnMatch=false
-
-log4j.category.org.apache.ignite.console=INFO,console
-
-# Direct log messages to a log file
-log4j.appender.file=org.apache.log4j.RollingFileAppender
-log4j.appender.file.File=logs/ignite-web-agent.log
-log4j.appender.file.MaxFileSize=10MB
-log4j.appender.file.MaxBackupIndex=10
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=[%d{ABSOLUTE}][%-5p][%t][%c{1}] %m%n

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/.gitignore
----------------------------------------------------------------------
diff --git a/modules/web-console/.gitignore b/modules/web-console/.gitignore
new file mode 100644
index 0000000..9ddddc4
--- /dev/null
+++ b/modules/web-console/.gitignore
@@ -0,0 +1,6 @@
+docker/standalone/backend/build
+docker/standalone/frontend/build
+docker/standalone/data
+docker/compose/backend/build
+docker/compose/frontend/build
+docker/dev/data

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/DEVNOTES.txt
----------------------------------------------------------------------
diff --git a/modules/web-console/DEVNOTES.txt b/modules/web-console/DEVNOTES.txt
index 3732b78..27211aa 100644
--- a/modules/web-console/DEVNOTES.txt
+++ b/modules/web-console/DEVNOTES.txt
@@ -13,22 +13,26 @@ How to deploy locally:
        npm install -g npm-windows-upgrade
        npm-windows-upgrade
        See: https://github.com/felixrieseberg/npm-windows-upgrade
-  Check npm version: "npm --version".
-5. Run "npm install --no-optional" in terminal for download dependencies.
-6. Build ignite-web-agent module follow instructions from 'modules/web-agent/README.txt'.
-7. Copy ignite-web-agent-<version>.zip from target of ignite-web-agent module to 'modules/web-console/src/main/js/serve/agent_dists' folder.
+  Check npm version: "npm --version", it should be 3.x.
+5. Change directory to '$IGNITE_HOME/modules/web-console/backend' and
+ run "npm install --no-optional" for download backend dependencies.
+6. Change directory to '$IGNITE_HOME/modules/web-console/frontend' and
+ run "npm install --no-optional" for download frontend dependencies.
+7. Build ignite-web-agent module follow instructions from 'modules/web-agent/README.txt'.
+8. Copy ignite-web-agent-<version>.zip from '$IGNITE_HOME/modules/web-console/web-agent/target'
+ to '$IGNITE_HOME/modules/web-console/backend/agent_dists' folder.
 
-Steps 1 - 7 should be executed once.
+Steps 1 - 8 should be executed once.
 
 How to run console in development mode:
 
 1. Configure MongoDB to run as service or in terminal change dir to $MONGO_INSTALL_DIR/server/3.0/bin
   and start MongoDB by executing "mongod".
 
-2. In new terminal change directory to '$IGNITE_HOME/modules/web-console/src/main/js'.
-   If needed run "npm install --no-optional" (if dependencies changed) and run "node serve" to start backend.
+2. In new terminal change directory to '$IGNITE_HOME/modules/web-console/backend'.
+   If needed run "npm install --no-optional" (if dependencies changed) and run "npm start" to start backend.
 
-3. In new terminal change directory to '$IGNITE_HOME/modules/web-console/src/main/js'
-  and start webpack in development mode "npm run dev" .
+3. In new terminal change directory to '$IGNITE_HOME/modules/web-console/frontend'.
+  If needed run "npm install --no-optional" (if dependencies changed) and start webpack in development mode "npm run dev".
 
 4. In browser open: http://localhost:9000

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/backend/.babelrc
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/.babelrc b/modules/web-console/backend/.babelrc
new file mode 100644
index 0000000..7eb36f4
--- /dev/null
+++ b/modules/web-console/backend/.babelrc
@@ -0,0 +1,9 @@
+{
+  "presets": ["es2015", "stage-1"],
+  "plugins": [[
+    "transform-builtin-extend", {
+      "globals": ["Error", "Array"],
+      "approximate": true
+    }
+  ]]
+}

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/backend/.eslintrc
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/.eslintrc b/modules/web-console/backend/.eslintrc
new file mode 100644
index 0000000..c0c772b
--- /dev/null
+++ b/modules/web-console/backend/.eslintrc
@@ -0,0 +1,188 @@
+parser: "babel-eslint"
+
+env:
+    es6: true
+    node: true
+    mocha: true
+
+ecmaFeatures:
+    arrowFunctions: true
+    blockBindings: true
+    classes: true
+    defaultParams: true
+    destructuring: true
+    module: true
+    objectLiteralComputedProperties: true
+    objectLiteralShorthandMethods: true
+    objectLiteralShorthandProperties: true
+    spread: true
+    templateStrings: true
+    experimentalObjectRestSpread: true
+
+globals:
+    _: true
+    io: true
+
+rules:
+    arrow-parens: [1, "always"]
+    arrow-spacing: [1, { "before": true, "after": true }]
+    accessor-pairs: 2
+    block-scoped-var: 2
+    brace-style: [0, "1tbs"]
+    comma-dangle: [2, "never"]
+    comma-spacing: [2, {"before": false, "after": true}]
+    comma-style: [2, "last"]
+    complexity: [1, 40]
+    computed-property-spacing: [2, "never"]
+    consistent-return: 0
+    consistent-this: [0, "that"]
+    constructor-super: 2
+    curly: [2, "multi-or-nest"]
+    default-case: 2
+    dot-location: 0
+    dot-notation: [2, { "allowKeywords": true }]
+    eol-last: 2
+    eqeqeq: 2
+    func-names: 0
+    func-style: [0, "declaration"]
+    generator-star-spacing: 0
+    guard-for-in: 1
+    handle-callback-err: 0
+    id-length: [2, {"min": 1, "max": 60}]
+    indent: [2, 4, {"SwitchCase": 1}]
+    key-spacing: [2, { "beforeColon": false, "afterColon": true }]
+    lines-around-comment: 0
+    linebreak-style: [0, "unix"]
+    max-depth: [0, 4]
+    max-len: [0, 120, 4]
+    max-nested-callbacks: [1, 4]
+    max-params: [0, 3]
+    max-statements: [0, 10]
+    new-cap: 2
+    new-parens: 2
+    no-alert: 2
+    no-array-constructor: 2
+    no-bitwise: 0
+    no-caller: 2
+    no-catch-shadow: 2
+    no-cond-assign: 2
+    no-console: 0
+    no-constant-condition: 2
+    no-continue: 0
+    no-class-assign: 2
+    no-const-assign: 2
+    no-control-regex: 2
+    no-debugger: 2
+    no-delete-var: 2
+    no-div-regex: 0
+    no-dupe-keys: 2
+    no-dupe-args: 2
+    no-duplicate-case: 2
+    no-else-return: 2
+    no-empty: 2
+    no-empty-character-class: 2
+    no-eq-null: 2
+    no-eval: 2
+    no-ex-assign: 2
+    no-extend-native: 2
+    no-extra-bind: 2
+    no-extra-boolean-cast: 2
+    no-extra-parens: 0
+    no-extra-semi: 2
+    no-fallthrough: 2
+    no-floating-decimal: 1
+    no-func-assign: 2
+    no-implied-eval: 2
+    no-inline-comments: 0
+    no-inner-declarations: [2, "functions"]
+    no-invalid-regexp: 2
+    no-irregular-whitespace: 2
+    no-iterator: 2
+    no-label-var: 2
+    no-labels: 2
+    no-lone-blocks: 2
+    no-lonely-if: 2
+    no-implicit-coercion: [2, {"boolean": false, "number": true, "string": true}]
+    no-loop-func: 2
+    no-mixed-requires: [0, false]
+    no-mixed-spaces-and-tabs: [2, true]
+    no-multi-spaces: 2
+    no-multi-str: 2
+    no-multiple-empty-lines: [0, {"max": 2}]
+    no-native-reassign: 2
+    no-negated-in-lhs: 2
+    no-nested-ternary: 0
+    no-new: 2
+    no-new-func: 2
+    no-new-object: 2
+    no-new-require: 0
+    no-new-wrappers: 2
+    no-obj-calls: 2
+    no-octal: 2
+    no-octal-escape: 2
+    no-param-reassign: 0
+    no-path-concat: 0
+    no-plusplus: 0
+    no-process-env: 0
+    no-process-exit: 1
+    no-proto: 2
+    no-redeclare: 2
+    no-regex-spaces: 1
+    no-restricted-modules: 0
+    no-script-url: 0
+    no-self-compare: 2
+    no-sequences: 2
+    no-shadow: 2
+    no-shadow-restricted-names: 2
+    no-spaced-func: 2
+    no-sparse-arrays: 1
+    no-sync: 0
+    no-ternary: 0
+    no-trailing-spaces: 2
+    no-throw-literal: 0
+    no-this-before-super: 2
+    no-unexpected-multiline: 2
+    no-undef: 2
+    no-undef-init: 2
+    no-undefined: 2
+    no-unneeded-ternary: 2
+    no-unreachable: 2
+    no-unused-expressions: [2, { allowShortCircuit: true }]
+    no-unused-vars: [2, {"vars": "all", "args": "after-used"}]
+    no-use-before-define: 2
+    no-useless-call: 2
+    no-void: 0
+    no-var: 2
+    no-warning-comments: 0
+    no-with: 2
+    newline-after-var: 0
+    object-shorthand: [2, "always"]
+    one-var: [2, "never"]
+    operator-assignment: [2, "always"]
+    operator-linebreak: 0
+    padded-blocks: 0
+    prefer-const: 1
+    prefer-spread: 2
+    quote-props: [2, "as-needed"]
+    quotes: [2, "single"]
+    radix: 1
+    semi: [2, "always"]
+    semi-spacing: [2, {"before": false, "after": true}]
+    sort-vars: 0
+    keyword-spacing: 2
+    space-before-blocks: [2, "always"]
+    space-before-function-paren: [2, "never"]
+    space-in-parens: 0
+    space-infix-ops: 2
+    space-unary-ops: [2, { "words": true, "nonwords": false }]
+    spaced-comment: [1, "always"]
+    use-isnan: 2
+    valid-jsdoc: 0
+    valid-typeof: 2
+    vars-on-top: 2
+    wrap-iife: 0
+    wrap-regex: 0
+    yoda: [2, "never"]
+
+parserOptions:
+    sourceType: module

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/backend/.gitignore
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/.gitignore b/modules/web-console/backend/.gitignore
new file mode 100644
index 0000000..f95e2bf
--- /dev/null
+++ b/modules/web-console/backend/.gitignore
@@ -0,0 +1,8 @@
+*.idea
+*.log
+.npmrc
+node_modules
+serve/config/*.json
+serve/agent_dists/*.zip
+agent_dists/*.zip
+config/*.json

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/backend/agent_dists/README.txt
----------------------------------------------------------------------
diff --git a/modules/web-console/backend/agent_dists/README.txt b/modules/web-console/backend/agent_dists/README.txt
new file mode 100644
index 0000000..d51bdf9
--- /dev/null
+++ b/modules/web-console/backend/agent_dists/README.txt
@@ -0,0 +1,7 @@
+Ignite Web Console
+======================================
+
+This is default folder for agent distributives.
+
+Also, you could specify custom folder in `serve/config/settings.json`
+