Skip to content

Commit

Permalink
disable indexdb and tabex
Browse files Browse the repository at this point in the history
Signed-off-by: Pierre Tardy <tardyp@gmail.com>
  • Loading branch information
tardyp committed Nov 5, 2015
1 parent 61a9c56 commit 2ed8a1a
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 25 deletions.
2 changes: 1 addition & 1 deletion www/base/guanlecoja/config.coffee
Expand Up @@ -52,7 +52,7 @@ config =
files: ["reconnecting-websocket.js"]
'buildbot-data':
version: '~1.0.14'
files: 'dist/scripts.js'
files: 'dist/buildbot-data.js'

testdeps:
"angular-mocks":
Expand Down
Expand Up @@ -13,7 +13,7 @@ class Builder extends Controller
sref: "builders"
,
caption: builder.name
sref: "builder({builder:#{builder.id}})"
sref: "builder({builder:#{builder.builderid}})"
]
recentStorage.addBuilder
link: "#/builders/#{builder.builderid}"
Expand Down
1 change: 1 addition & 0 deletions www/data_module/guanlecoja/config.coffee
Expand Up @@ -47,6 +47,7 @@ config =
build: 'dist'

sourcemaps: true
output_scripts: "buildbot-data.js"
### ###########################################################################################
# Bower dependancies configuration
### ###########################################################################################
Expand Down
Expand Up @@ -40,7 +40,7 @@ class Collection extends Factory
console.log e
readyHandler: (data) ->
@from(data)
@getReadyDeferred()?.resolve(@)
@getReadyDeferred()?.resolve(this)

# add new elements and remove old ones
newHandler: (data) ->
Expand Down
50 changes: 40 additions & 10 deletions www/data_module/src/services/indexeddb/indexeddb.service.coffee
@@ -1,7 +1,8 @@
class IndexedDB extends Service
constructor: ($log, $injector, $q, $window, $timeout, dataUtilsService, DBSTORES, SPECIFICATION) ->
constructor: ($log, $injector, $q, $window, config, $timeout, dataUtilsService, DBSTORES, SPECIFICATION) ->
return new class IndexedDBService
constructor: ->
# config.enableIndexedDB = true
@db = new $window.Dexie('BBCache')
version = $window.localStorage.getItem('BBCacheVERSION')
# just recreate in case of old version in the browser
Expand All @@ -11,14 +12,14 @@ class IndexedDB extends Service
stores = {}
angular.extend stores, @processSpecification(SPECIFICATION), DBSTORES
@db.version(1).stores(stores)

# global db error handler
@db.on 'error', (e) -> $log.error(e)
# open the database
@open()
$window.localStorage.setItem('BBCacheVERSION', SPECIFICATION.VERSION)

@spentInDb = []
@cache = {}

logSpentInDb: ->
tot = 0
Expand All @@ -39,6 +40,33 @@ class IndexedDB extends Service
.catch (e) -> $log.error 'indexedDBService: clear', e
.finally => @open().then -> resolve()

getTable: (tableName) ->
table = @db[tableName]
@cache[table.name] ?= {}
table.cache = @cache[table.name]
return table

put: (table, value) ->
table = @getTable(table)
if config.enableIndexedDB
element = { }
for k, v of value
if not angular.isObject(v)
element[k] = angular.toJson(v)
return table.put(element)
else
table.cache[value[table.schema.primKey.keyPath]] = value
return $q.when()

getObject: (table, id) ->
table = @getTable(table)
if config.enableIndexedDB
return table.get(id)
if not table.cache.hasOwnProperty(id)
table.cache[id] = {}

return $q.when(table.cache[id])

get: (url, query = {}) ->
$q (resolve, reject) =>
@processUrl(url).then ([tableName, q, id]) =>
Expand All @@ -47,25 +75,22 @@ class IndexedDB extends Service
if not SPECIFICATION[tableName]?
resolve([])
return
table = @db[tableName]
table = @getTable(tableName)

t1 = window.performance.now()
if @logSpentInDbTimeout?
$timeout.cancel @logSpentInDbTimeout
@logSpentInDbTimeout = $timeout (=>@logSpentInDb()), 2000
@logSpentInDbTimeout = $timeout ( => @logSpentInDb()), 2000

# convert promise to $q implementation
if id?
table.get(id).then (e) =>
t2 = window.performance.now()
@spentInDb .push t2 - t1
resolve dataUtilsService.parse(e)
@getObject(tableName, id).then (e) ->
resolve(dataUtilsService.parse(e))
return

@native_filter(table, query).then ([array, query]) =>
t2 = window.performance.now()
@spentInDb .push t2 - t1
array = array.map (e) => dataUtilsService.parse(e)

# 1. filtering
filters = []
for fieldAndOperator, value of query
Expand Down Expand Up @@ -106,6 +131,9 @@ class IndexedDB extends Service
return false

native_filter: (table, query) ->
if not config.enableIndexedDB
return $.when([_.values(table.cache), query])

$q (resolve, reject) =>
query_remain = angular.extend({}, query)
collection = table
Expand All @@ -128,7 +156,9 @@ class IndexedDB extends Service
delete query_remain[fieldAndOperator]
break # can only do one native filter
collection.toArray().then (array) ->
array = array.map (e) -> dataUtilsService.parse(e)
resolve [array, query_remain]

filter: (array, filters, tableName) ->
array.filter (v) ->
for fieldAndOperator, value of filters
Expand Down
25 changes: 13 additions & 12 deletions www/data_module/src/services/tabex/tabex.service.coffee
@@ -1,5 +1,5 @@
class Tabex extends Service
constructor: ($log, $window, $q, $timeout, socketService, restService, dataUtilsService, indexedDBService, SPECIFICATION) ->
constructor: ($log, $window, $q, config, $timeout, socketService, restService, dataUtilsService, indexedDBService, SPECIFICATION) ->
return new class TabexService
CHANNELS =
MASTER: '!sys.master'
Expand All @@ -16,7 +16,9 @@ class Tabex extends Service
NEW: 'bb.event.new'
EVENTS: EVENTS

client: $window.tabex.client()
# HACK: we disable tabex without removing the code
# tabex is too slow on chrome, so we need to disable until we sort out slowness
client: $window.tabex.client(namespace:Math.random().toString())

constructor: ->
# the message handler will be called on update messages
Expand Down Expand Up @@ -102,7 +104,7 @@ class Tabex extends Service
if event is 'new' then event = EVENTS.NEW
else event = EVENTS.UPDATE
# update the object in the db
indexedDBService.db[type].put(message).then =>
indexedDBService.put(type, message).then =>
# emit the event
for path of @trackedPaths
if ///^#{path.replace(/\*/g, '(\\w+|\\d+)')}$///.test(key) or
Expand Down Expand Up @@ -130,6 +132,8 @@ class Tabex extends Service
t = dataUtilsService.type(path)
specification = @getSpecification(t)
# test if cached and active
if not config.enableIndexedDB
dbPaths = []
for dbPath in dbPaths
dbPath.query = angular.fromJson(dbPath.query)
inCache =
Expand All @@ -153,29 +157,26 @@ class Tabex extends Service
db.transaction 'rw', db[type], ->
if not angular.isArray(data) then data = [data]
data.forEach (i) ->
put = (element) ->
for k, v of element
if angular.isObject(element[k])
element[k] = angular.toJson(v)
db[type].put(element)

idName = SPECIFICATION[type]?.id
id = i[idName]
if id?
db[type].get(id).then (e) ->
indexedDBService.getObject(type, id).then (e) ->
if not e?
e = {}
e = dataUtilsService.parse(e)
for k, v of i then e[k] = v
if parentIdName?
e[parentIdName] ?= []
if parentId not in e[parentIdName]
e[parentIdName].push(parentId)
put(e)
indexedDBService.put(type, e)
.catch ->
if parentIdName? then i[parentIdName] = [parentId]
put(i)
indexedDBService.put(type, i)
else
if parentIdName? then i[parentIdName] = [parentId]
put(i)
indexedDBService.put(type, i)

.then ->
db.transaction 'rw', db.paths, ->
Expand Down

0 comments on commit 2ed8a1a

Please sign in to comment.