1 /**
2 * Copyright (c) 2002-2011 "Neo Technology,"
3 * Network Engine for Objects in Lund AB [http://neotechnology.com]
4 *
5 * This file is part of Neo4j.
6 *
7 * Neo4j is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 */
20 package org.neo4j.server.rrd;
21
22 import org.rrd4j.core.Sample;
23
24 import javax.management.MalformedObjectNameException;
25 import java.io.IOException;
26 import java.util.Date;
27
28 /**
29 * Manages sampling the state of the database and storing the samples in a round
30 * robin database instance.
31 */
32 public class RrdSampler {
33 /**
34 * The current sampling object. This is created when calling #start().
35 */
36 private Sample sample;
37 private Sampleable[] samplables;
38
39 /**
40 * Keep track of whether to run the update task or not.
41 */
42 protected RrdSampler(Sample sample, Sampleable... samplables) throws MalformedObjectNameException {
43 this.sample = sample;
44 this.samplables = samplables;
45 }
46
47 /*
48 * This method is called each time we want a snapshot of the current system
49 * state. Data sources to work with are defined in {@link
50 * RrdManager#getRrdDB()}
51 */
52 public Sample updateSample() {
53 try {
54 sample.setTime(new Date().getTime());
55 for (Sampleable samplable : samplables) {
56 sample.setValue(samplable.getName(), samplable.getValue());
57 }
58
59 sample.update();
60 return sample;
61 } catch (IOException e) {
62 throw new RuntimeException("IO Error trying to access round robin database path. See nested exception.", e);
63 }
64 }
65 }