blob: 7b0a1cdc94a1499592a8fc47363b81cd92ed96e0 [file] [log] [blame]
/*
* 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);
}
}
}
}