Changeset 935


Ignore:
Timestamp:
04/11/13 18:13:13 (6 years ago)
Author:
marcus
Message:
  • local caching of meta data
Location:
SHX/trunk/SeismicHandler
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • SHX/trunk/SeismicHandler/commands/fetch.py

    r933 r935  
    4848        "PASSWORD", 
    4949        "STOREMETA", 
     50        "LOCALONLY", 
    5051    ] 
    5152 
     
    6768                st = [] 
    6869                if self.qualifiers["USECACHE"]: 
    69                     st = self.from_cache(station, channel, component, start, duration) 
     70                    st = self.from_cache(station, channel, component, start, 
     71                                                                      duration) 
    7072 
    7173                # fetch from remote if not found 
    72                 if not st: 
     74                if not st and not self.qualifiers["LOCALONLY"]: 
    7375                    try: 
    74                         st = self.arclink(station, channel, component, start, duration) 
     76                        st = self.arclink(station, channel, component, start, 
     77                                                                      duration) 
    7578                    except: 
    7679                        continue 
     
    7881                    if self.qualifiers["STOREMETA"]: 
    7982                        # save meta data locally 
    80                         pass 
     83                        t = st[0] 
     84                        paz = t.stats.get("paz", None) 
     85                        if paz is not None: 
     86                            meta = ChannelMeta( 
     87                                network=t.stats.network, 
     88                                station=t.stats.station, 
     89                                location=t.stats.location, 
     90                                stream=t.stats.channel[:2], 
     91                                component=t.stats.channel[-1], 
     92                                latitude=t.stats.coordinates.latitude, 
     93                                longitude=t.stats.coordinates.longitude, 
     94                                gain=1e9/paz.sensitivity, 
     95                                poles=str(paz.poles), 
     96                                zeros=str(paz.zeros), 
     97                                start=t.stats.starttime, 
     98                                elevation=t.stats.coordinates.elevation, 
     99                                end=t.stats.endtime, 
     100                                depth=t.stats.coordinates.get("depth", 0.), 
     101                            ) 
     102                            Stations().add(meta, replace=True, local=True) 
    81103 
    82104                if st: 
     
    92114 
    93115        path = "sds:" + Settings.config.paths.cache[0] 
    94         st = reads.load(station, channel, component, start, duration, path, return_stream=True) 
     116        st = reads.load(station, channel, component, start, duration, path, 
     117                                                            return_stream=True) 
    95118 
    96119        # not found at all 
     
    130153        if self._client is not None: 
    131154            client = self._client 
     155            host = client.init_host 
    132156        else: 
    133157            host, port = Settings.config.arclink['host'][0].split(':') 
     
    147171                    import platform 
    148172                    user = "%s@%s.SHX.auto.local" % ( 
    149                                                 getpass.getuser(), platform.node()) 
     173                                            getpass.getuser(), platform.node()) 
    150174                    msg = "No user id for remote access provided, please edit " 
    151175                    msg += "configuration! Using '%s' meanwhile..." 
     
    178202        try: 
    179203            st = client.getWaveform(*parameters) 
    180             msg = "fetched via webdc: %s" % ",".join([_i.id for _i in st]) 
     204            msg = "fetched via %s: %s" % (host, ",".join([_i.id for _i in st])) 
    181205            log_message("info.fetch", msg) 
    182206            if Settings.swChatty: 
  • SHX/trunk/SeismicHandler/modules/stations.py

    r925 r935  
    7474 
    7575        self.channel = ".".join([network, station, location, \ 
    76                                                   "".join([stream, component])]) 
     76                                                 "".join([stream, component])]) 
    7777 
    7878        keys = locals().keys() 
     
    161161        if name == "start": 
    162162            return UTCDateTime(self.__dict__["ondate"]) + \ 
    163                                                  self.__dict__["ondatems"] / 1e6 
     163                                                self.__dict__["ondatems"] / 1e6 
    164164         
    165165        # "end" 
     
    168168 
    169169        return UTCDateTime(self.__dict__["offdate"]) + \ 
    170                                                 self.__dict__["offdatems"] / 1e6 
     170                                            self.__dict__["offdatems"] / 1e6 
    171171 
    172172    def __compare(self, other): 
     
    343343        raise KeyError("no meta data of '%s' found for '%s'" % (code, date)) 
    344344 
    345     def add(self, station, replace=False): 
    346         """ 
    347         Add station to database. 
     345    def add(self, station, replace=False, local=False): 
     346        """ 
     347        Add station to database. If "local" is set to True, the data will be 
     348        saved in user's database regardless if meta data is present already. 
    348349        """ 
    349350        # XXX check for update -> dirty session 
     
    354355        session = self.dbsessions[self.dbreadwrite] 
    355356 
    356         # check for conflict 
    357         try: 
    358             update = self[station.channel, station._start] 
    359             if update == station: 
    360                 return 
    361  
    362             if not replace: 
    363                 raise ValueError("Concurrent data present! % " % station) 
    364  
    365             session.delete(update) 
    366         except KeyError as E: 
    367             if E.message.startswith("ond"): 
    368                 print E 
     357        # try to save local in any case 
     358        if local: 
     359            try: 
     360                session.add(station) 
     361                session.commit() 
     362            except Exception as E: 
     363                # query existing data 
     364                session.rollback() 
     365                conflict = session.query(ChannelMeta).filter_by( \ 
     366                       channel=station.channel, ondate=station.ondate).all()[0] 
     367 
     368                # offdate identical 
     369                if conflict.offdate <= station.offdate: 
     370                    session.delete(conflict) 
     371                else: 
     372                    conflict.ondate = station.offdate 
     373                    conflict.ondatems = station.offdatems 
     374 
     375                session.commit() 
     376 
     377                # finally add new data 
     378                session.add(station) 
     379                session.commit() 
     380        else: 
     381            # check for conflict 
     382            try: 
     383                update = self[station.channel, station._start] 
     384                if update == station: 
     385                    return 
     386 
     387                if not replace: 
     388                    raise ValueError("Concurrent data present! % " % station) 
     389 
     390                session.delete(update) 
     391            except KeyError as E: 
     392                if E.message.startswith("ond"): 
     393                    print E 
     394                    import pdb; pdb.set_trace() 
     395            except Exception as E: 
     396                print "xx", E 
    369397                import pdb; pdb.set_trace() 
    370         except Exception as E: 
    371             print "xx", E 
    372             import pdb; pdb.set_trace() 
    373  
    374         session.add(station) 
    375  
    376         try: 
    377             session.commit() 
    378         except Exception as e: 
    379             print e 
    380             import pdb; pdb.set_trace() 
    381             session.rollback() 
     398 
     399            session.add(station) 
     400 
     401            try: 
     402                session.commit() 
     403            except Exception as e: 
     404                print e 
     405#                import pdb; pdb.set_trace() 
     406                session.rollback() 
    382407 
    383408    def fetch(self, station): 
  • SHX/trunk/SeismicHandler/shx.conf

    r929 r935  
    8989[arclink] 
    9090user = 
    91 host = webdc.eu:18002 
     91host = eida.gfz-potsdam.de:18002 
    9292#login = password 
    9393 
Note: See TracChangeset for help on using the changeset viewer.