/* * 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.examples; import java.net.URL; import java.util.List; import org.apache.ignite.Ignite; import org.apache.ignite.cluster.ClusterGroup; /** * */ public class ExamplesUtils { /** */ private static final ClassLoader CLS_LDR = ExamplesUtils.class.getClassLoader(); /** * Exits with code {@code -1} if maximum memory is below 90% of minimally allowed threshold. * * @param min Minimum memory threshold. */ public static void checkMinMemory(long min) { long maxMem = Runtime.getRuntime().maxMemory(); if (maxMem < .85 * min) { System.err.println("Heap limit is too low (" + (maxMem / (1024 * 1024)) + "MB), please increase heap size at least up to " + (min / (1024 * 1024)) + "MB."); System.exit(-1); } } /** * Returns URL resolved by class loader for classes in examples project. * * @return Resolved URL. */ public static URL url(String path) { URL url = CLS_LDR.getResource(path); if (url == null) throw new RuntimeException("Failed to resolve resource URL by path: " + path); return url; } /** * Checks minimum topology size for running a certain example. * * @param grp Cluster to check size for. * @param size Minimum number of nodes required to run a certain example. * @return {@code True} if check passed, {@code false} otherwise. */ public static boolean checkMinTopologySize(ClusterGroup grp, int size) { int prjSize = grp.nodes().size(); if (prjSize < size) { System.err.println(">>> Please start at least " + size + " cluster nodes to run example."); return false; } return true; } /** * Checks if cluster has server nodes. * * @param ignite Ignite instance. * @return {@code True} if cluster has server nodes, {@code false} otherwise. */ public static boolean hasServerNodes(Ignite ignite) { if (ignite.cluster().forServers().nodes().isEmpty()) { System.err.println("Server nodes not found (start data nodes with ExampleNodeStartup class)"); return false; } return true; } /** * Convenience method for printing query results. * * @param res Query results. */ public static void printQueryResults(List<?> res) { if (res == null || res.isEmpty()) System.out.println("Query result set is empty."); else { for (Object row : res) { if (row instanceof List) { System.out.print("("); List<?> l = (List)row; for (int i = 0; i < l.size(); i++) { Object o = l.get(i); if (o instanceof Double || o instanceof Float) System.out.printf("%.2f", o); else System.out.print(l.get(i)); if (i + 1 != l.size()) System.out.print(','); } System.out.println(')'); } else System.out.println(" " + row); } } } }