001 package org.LiveGraph.demoDataSource; 002 003 import org.LiveGraph.dataFile.write.DataStreamWriter; 004 import org.LiveGraph.dataFile.write.DataStreamWriterFactory; 005 006 import com.softnetConsult.utils.sys.SystemTools; 007 008 009 /** 010 * This class is used for generating a demo data file for demonstration and 011 * testing purposes. 012 * It creates a data file and fills it with data. This happens in bursts 013 * of {@value #MIN_BURST} to {@value #MAX_BURST} datasets at a time. 014 * Between the bursts the execution is paused for {@value #MIN_SLEEP} 015 * to {@value #MAX_SLEEP} milliseconds. This way a data generating simulation 016 * is emulated. The program stops after {@value #MAX_DATASETS} datasets have 017 * been written. 018 * 019 * 020 * <p style="font-size:smaller;">This product includes software developed by the 021 * <strong>LiveGraph</strong> project and its contributors.<br /> 022 * (<a href="http://www.live-graph.org" target="_blank">http://www.live-graph.org</a>)<br /> 023 * Copyright (c) 2007-2008 G. Paperin.<br /> 024 * All rights reserved. 025 * </p> 026 * <p style="font-size:smaller;">File: LiveGraphDemo.java</p> 027 * <p style="font-size:smaller;">Redistribution and use in source and binary forms, with or 028 * without modification, are permitted provided that the following terms and conditions are met: 029 * </p> 030 * <p style="font-size:smaller;">1. Redistributions of source code must retain the above 031 * acknowledgement of the LiveGraph project and its web-site, the above copyright notice, 032 * this list of conditions and the following disclaimer.<br /> 033 * 2. Redistributions in binary form must reproduce the above acknowledgement of the 034 * LiveGraph project and its web-site, the above copyright notice, this list of conditions 035 * and the following disclaimer in the documentation and/or other materials provided with 036 * the distribution.<br /> 037 * 3. All advertising materials mentioning features or use of this software or any derived 038 * software must display the following acknowledgement:<br /> 039 * <em>This product includes software developed by the LiveGraph project and its 040 * contributors.<br />(http://www.live-graph.org)</em><br /> 041 * 4. All advertising materials distributed in form of HTML pages or any other technology 042 * permitting active hyper-links that mention features or use of this software or any 043 * derived software must display the acknowledgment specified in condition 3 of this 044 * agreement, and in addition, include a visible and working hyper-link to the LiveGraph 045 * homepage (http://www.live-graph.org). 046 * </p> 047 * <p style="font-size:smaller;">THIS SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY 048 * OF ANY KIND, EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 049 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 050 * THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 051 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR 052 * IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 053 * </p> 054 * 055 * @author Greg Paperin (<a href="http://www.paperin.org" target="_blank">http://www.paperin.org</a>) 056 * @version {@value org.LiveGraph.LiveGraph#version} 057 */ 058 public class LiveGraphDemo { 059 060 public static final String DEMO_DIR = System.getProperty("user.dir"); 061 062 public static final int MIN_SLEEP = 0; 063 public static final int MAX_SLEEP = 1; 064 public static final int MIN_BURST = 1; 065 public static final int MAX_BURST = 10; 066 public static final int MAX_DATASETS = 1000000; 067 068 public void exec() { 069 070 // Print a welcome message: 071 System.out.println("Welcome to the LiveGraph demo."); 072 073 // Setup a data writer object: 074 DataStreamWriter out = DataStreamWriterFactory.createDataWriter(DEMO_DIR, "LiveGraphDemo"); 075 076 // Set a values separator: 077 out.setSeparator(";"); 078 079 // Add a file description line: 080 out.writeFileInfo("LiveGraph demo file."); 081 082 // Set-up the data series: 083 out.addDataSeries("Time"); 084 out.addDataSeries("Dataset number"); 085 out.addDataSeries("Burst number"); 086 out.addDataSeries("Random value"); 087 088 // Loop until enough datasets a written: 089 int datasetNumber = 0; 090 int burstNumber = 0; 091 long startMillis = System.currentTimeMillis(); 092 while (MAX_DATASETS > datasetNumber) { 093 094 // Status message: 095 System.out.println("Datasets written so far: " + datasetNumber + ". " 096 + "Now writing burst " + burstNumber + "..."); 097 098 // Write a few datasets to the file: 099 int burstSize = (int) (MIN_BURST + (Math.random() * (double) (MAX_BURST - MIN_BURST))); 100 for (int b = 0; b < burstSize && MAX_DATASETS > datasetNumber; b++) { 101 102 // Set-up the data values: 103 out.setDataValue(System.currentTimeMillis() - startMillis); 104 out.setDataValue(datasetNumber); 105 out.setDataValue(burstNumber); 106 out.setDataValue(Math.random()); 107 108 // Write dataset to disk: 109 out.writeDataSet(); 110 111 // Check for IOErrors: 112 if (out.hadIOException()) { 113 out.getIOException().printStackTrace(); 114 out.resetIOException(); 115 } 116 117 datasetNumber++; 118 } 119 burstNumber++; 120 121 122 // Pause: 123 Thread.yield(); 124 long sleep = (long) (MIN_SLEEP + (Math.random() * (double) (MAX_SLEEP - MIN_SLEEP))); 125 SystemTools.sleep(sleep); 126 Thread.yield(); 127 } 128 129 // Finish: 130 out.close(); 131 System.out.println("Demo finished. Cheers."); 132 } 133 134 public static void main(String[] unusedArgs) { 135 (new LiveGraphDemo()).exec(); 136 } 137 138 } // public class LiveGraphDemo