- Timestamp:
- 06/30/13 12:48:20 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
java/main/src/main/java/com/framsticks/diagnostics/Diagnostics.java
r84 r88 1 1 package com.framsticks.diagnostics; 2 2 3 import org.apache.commons.configuration.Configuration;4 3 5 import com.framsticks.observers.Endpoint; 6 import com.framsticks.observers.Observer; 4 import java.util.Date; 5 import java.io.File; 6 import java.io.FileOutputStream; 7 import java.io.IOException; 8 import java.io.OutputStreamWriter; 9 import java.io.PrintWriter; 10 import java.text.SimpleDateFormat; 11 12 import org.apache.log4j.Logger; 13 14 import com.framsticks.core.AbstractInstanceListener; 15 import com.framsticks.core.Instance; 16 import com.framsticks.dumping.PrintWriterSink; 17 import com.framsticks.dumping.SaveStream; 18 import com.framsticks.params.annotations.AutoAppendAnnotation; 19 import com.framsticks.remote.RecursiveFetcher; 20 import com.framsticks.util.Logging; 21 import com.framsticks.util.PeriodicTask; 22 import com.framsticks.util.StateFunctor; 23 import com.framsticks.util.dispatching.JoinableCollection; 24 import com.framsticks.util.io.Encoding; 7 25 8 26 /** 9 27 * @author Piotr Sniegowski 10 28 */ 11 public class Diagnostics extends Observer { 29 public class Diagnostics extends JoinableCollection<Instance> { 30 private static final Logger log = 31 Logger.getLogger(Diagnostics.class); 32 12 33 13 34 Integer dumpsInterval; … … 19 40 } 20 41 42 21 43 @Override 22 public void configure(Configuration config) { 23 super.configure(config); 24 dumpsInterval = config.getInteger("dumps.interval", null); 25 dumpsPath = config.getString("dumps.path", null); 26 dumpsFormat = config.getString("dumps.format", null); 44 @AutoAppendAnnotation 45 public void add(final Instance instance) { 46 super.add(instance); 47 48 instance.addListener(new AbstractInstanceListener() { 49 @Override 50 public void onRun(Exception e) { 51 if (e != null) { 52 return; 53 } 54 55 if (dumpsInterval != null) { 56 new PeriodicTask<Instance>(instance, dumpsInterval * 1000) { 57 @Override 58 public void run() { 59 60 log.info("starting periodic dump"); 61 new RecursiveFetcher(instance, instance.getRootPath(), new StateFunctor() { 62 @Override 63 public void call(Exception e) { 64 if (Logging.log(log, "recursively fetch", instance, e)) { 65 again(); 66 return; 67 } 68 log.info("instance resolved, saving"); 69 try { 70 final String fileName = dumpsPath + "/" + instance + "_" + new SimpleDateFormat(dumpsFormat).format(new Date()) + ".param"; 71 File file = new File(fileName); 72 new SaveStream(new PrintWriterSink(new PrintWriter(new OutputStreamWriter(new FileOutputStream(file), Encoding.getFramsticksCharset()))), instance, instance.getRootPath(), new StateFunctor() { 73 @Override 74 public void call(Exception e) { 75 Logging.log(log, "periodic dump in " + fileName + " of", instance, e); 76 again(); 77 } 78 }); 79 } catch (IOException ex) { 80 log.info("failed to initiate dump: " + ex); 81 again(); 82 } 83 84 } 85 }); 86 } 87 }; 88 } 89 } 90 }); 91 92 93 27 94 } 28 95 29 30 @Override 31 protected Endpoint createEndpoint() { 32 return new DiagnosticsEndpoint(); 33 } 34 96 // @Override 97 // public void configure(Configuration config) { 98 // super.configure(config); 99 // dumpsInterval = config.getInteger("dumps.interval", null); 100 // dumpsPath = config.getString("dumps.path", null); 101 // dumpsFormat = config.getString("dumps.format", null); 102 // } 35 103 36 104 }
Note: See TracChangeset
for help on using the changeset viewer.