1 10 package org.mmbase.module.builders.vwms; 11 12 import java.util.*; 13 14 import org.mmbase.module.core.*; 15 import org.mmbase.util.*; 16 import org.mmbase.util.Queue; 17 import org.mmbase.util.logging.*; 18 import org.mmbase.module.builders.*; 19 import org.mmbase.module.gui.html.*; 20 21 36 37 public class PageMaster extends Vwm implements MMBaseObserver,VwmServiceInterface { 38 39 private static final Logger log = Logging.getLoggerInstance(PageMaster.class); 40 41 boolean first=true; 43 44 Object syncobj=new Object (); 46 49 Queue files2copy=new Queue(128); 50 53 FileCopier filecopier=new FileCopier(files2copy); 54 57 Vector mirrornodes; 58 59 61 64 public PageMaster() { 65 log.debug("ready for action"); 66 } 67 68 79 public boolean probeCall() { 80 if (first) { 81 first=false; 83 } else { 84 try { 86 Netfiles bul=(Netfiles)Vwms.getMMBase().getMMObject("netfiles"); 87 Enumeration e=bul.search("service=='pages'+subservice=='main'+status="+Netfiles.STATUS_REQUEST); 89 int i=0; 90 while (e.hasMoreElements() && i<10) { 91 MMObjectNode node=(MMObjectNode)e.nextElement(); 92 fileChange(""+node.getIntValue("number"),"c"); 93 i++; 94 } 95 } catch(Exception e) { 96 log.error(Logging.stackTrace(e)); 97 } 98 try { 100 Netfiles bul=(Netfiles)Vwms.getMMBase().getMMObject("netfiles"); 101 Enumeration e=bul.search("service=='pages'+subservice=='mirror'+status="+Netfiles.STATUS_REQUEST); 102 int i=0; 104 while (e.hasMoreElements() && i<50) { 105 MMObjectNode node=(MMObjectNode)e.nextElement(); 106 fileChange(""+node.getIntValue("number"),"c"); 107 i++; 108 } 109 } catch(Exception e) { 110 log.error(Logging.stackTrace(e)); 111 } 112 } 113 return true; 114 } 115 116 124 public boolean nodeRemoteChanged(String machine,String number,String builder,String ctype) { 125 return nodeChanged(machine,number,builder,ctype); 126 } 127 128 136 public boolean nodeLocalChanged(String machine,String number,String builder,String ctype) { 137 return nodeChanged(machine,number,builder,ctype); 138 } 139 140 149 public boolean nodeChanged(String machine,String number,String builder, String ctype) { 150 return true; 152 } 153 154 163 public boolean fileChange(String service,String subservice,String filename) { 164 log.debug("frontend change -> "+filename); 165 log.service("s="+service+" sub="+subservice+"file="+filename); 166 if (subservice.equals("main")) { 168 handleMainCheck(service,subservice,filename); 169 } 170 return true; 171 } 172 173 181 public boolean fileChange(String number, String ctype) { 182 Netfiles bul=(Netfiles)Vwms.getMMBase().getMMObject("netfiles"); 185 MMObjectNode filenode=bul.getNode(number); 186 if (filenode!=null) { 187 String service=filenode.getStringValue("service"); 189 String subservice=filenode.getStringValue("subservice"); 190 int status=filenode.getIntValue("status"); 191 192 if (subservice.equals("main")) { 194 return handleMain(filenode,status,ctype); 195 } else if (subservice.equals("mirror")) { 196 return handleMirror(filenode,status,ctype); 197 } 198 } 199 return true; 200 } 201 202 211 public boolean handleMirror(MMObjectNode filenode,int status,String ctype) { 212 switch(status) { 213 case Netfiles.STATUS_REQUEST: filenode.setValue("status",Netfiles.STATUS_ON_ITS_WAY); 216 filenode.commit(); 217 String filename=filenode.getStringValue("filename"); 218 String dstserver=filenode.getStringValue("mmserver"); 219 String sshpath=getProperty("demoserver","sshpath"); 224 log.debug("sshpath="+sshpath); 225 String srcpath=getProperty("demoserver","path"); 226 log.debug("srcpath="+srcpath); 227 String dstuser=getProperty(dstserver,"user"); 228 log.debug("dstuser="+dstuser); 229 String dsthost=getProperty(dstserver,"host"); 230 log.debug("dsthost="+dsthost); 231 String dstpath=getProperty(dstserver,"path"); 232 log.debug("dstpath="+dstpath); 233 234 242 files2copy.append(new aFile2Copy(dstuser,dsthost,dstpath,srcpath,filename,sshpath)); 245 246 filenode.setValue("status",Netfiles.STATUS_DONE); 248 filenode.commit(); 249 break; 250 case Netfiles.STATUS_ON_ITS_WAY: break; 252 case Netfiles.STATUS_DONE: break; 254 } 255 return true; 256 } 257 258 270 public boolean handleMain(MMObjectNode filenode,int status,String ctype) { 271 switch(status) { 272 case Netfiles.STATUS_REQUEST: filenode.setValue("status",Netfiles.STATUS_ON_ITS_WAY); 275 filenode.commit(); 276 doMainRequest(filenode); 278 filenode.setValue("status",Netfiles.STATUS_DONE); 280 filenode.commit(); 281 break; 282 case Netfiles.STATUS_ON_ITS_WAY: break; 284 case Netfiles.STATUS_DONE: break; 286 case Netfiles.STATUS_CHANGED: filenode.setValue("status",Netfiles.STATUS_CALC_PAGE); 288 filenode.commit(); 289 break; 290 case Netfiles.STATUS_CALC_PAGE: String filename=filenode.getStringValue("filename"); 292 calcPage(filename); 293 filenode.setValue("status",Netfiles.STATUS_REQUEST); 294 filenode.commit(); 295 break; 296 } 297 return true; 298 } 299 300 307 public boolean doMainRequest(MMObjectNode filenode) { 308 String filename = filenode.getStringValue("filename"); 311 312 Netfiles bul=(Netfiles)Vwms.getMMBase().getMMObject("netfiles"); 314 Enumeration e=bul.search("WHERE filename='"+filename+"' AND service='pages' AND subservice='mirror'"); 315 while (e.hasMoreElements()) { 316 MMObjectNode mirrornode=(MMObjectNode)e.nextElement(); 317 mirrornode.setValue("status",Netfiles.STATUS_REQUEST); 318 mirrornode.commit(); 319 } 320 return true; 321 } 322 323 332 public void handleMainCheck(String service,String subservice,String filename) { 333 log.debug("Reached handleMainCheck"); 334 Netfiles bul=(Netfiles)Vwms.getMMBase().getMMObject("netfiles"); 335 Enumeration e=bul.search("WHERE filename='"+filename+"' AND service='"+service+"' AND subservice='"+subservice+"'"); 336 if (e.hasMoreElements()) { 337 MMObjectNode mainnode=(MMObjectNode)e.nextElement(); 338 mainnode.setValue("status",Netfiles.STATUS_REQUEST); 339 mainnode.commit(); 340 } else { 341 MMObjectNode mainnode=bul.getNewNode("system"); 342 mainnode.setValue("filename",filename); 343 mainnode.setValue("mmserver",Vwms.getMMBase().getMachineName()); 344 mainnode.setValue("service",service); 345 mainnode.setValue("subservice",subservice); 346 mainnode.setValue("status",Netfiles.STATUS_REQUEST); 347 mainnode.setValue("filesize",-1); 348 bul.insert("system",mainnode); 349 350 Enumeration f=getMirrorNodes(service).elements(); 351 while (f.hasMoreElements()) { 352 MMObjectNode n2=(MMObjectNode)f.nextElement(); 353 mainnode=bul.getNewNode("system"); 355 mainnode.setValue("filename",filename); 356 mainnode.setValue("mmserver",n2.getStringValue("name")); 357 mainnode.setValue("service",service); 358 mainnode.setValue("subservice","mirror"); 359 mainnode.setValue("status",Netfiles.STATUS_DONE); 360 mainnode.setValue("filesize",-1); 361 bul.insert("system",mainnode); 362 } 363 } 364 } 365 366 372 public String getProperty(String machine,String key) { 373 MMServers mmservers=(MMServers)Vwms.getMMBase().getMMObject("mmservers"); 374 return mmservers.getMMServerProperty(machine,key); 375 } 376 377 378 384 public void calcPage(String url) { 385 scanparser m=(scanparser)Vwms.getMMBase().getModule("SCANPARSER"); 386 url=url.substring(0,url.length()-5); 387 url=url.replace(':','?'); 388 log.debug("getPage="+url); 389 if (m!=null) { 390 scanpage sp=new scanpage(); 391 m.calcPage(url,sp,0); 392 } 393 } 394 395 402 public Vector getMirrorNodes(String service) { 403 if (mirrornodes!=null) return mirrornodes; 404 NetFileSrv bul=(NetFileSrv)Vwms.getMMBase().getMMObject("netfilesrv"); 405 if (bul!=null) { 406 Enumeration e=bul.search("service=='pages'+subservice=='mirror'"); 407 if (e.hasMoreElements()) { 408 MMObjectNode n1=(MMObjectNode)e.nextElement(); 409 mirrornodes=n1.getRelatedNodes("mmservers"); 410 if (mirrornodes!=null) return mirrornodes; 411 } 412 } 413 mirrornodes=new Vector(); 414 return mirrornodes; 415 } 416 } 417 | Popular Tags |