Fixes to the hosting module to correctly store ATOM feeds instead of raw collections and work with the sqldb component.
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1291136 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
3479cfa158
commit
1a01ce4fe5
29 changed files with 56 additions and 56 deletions
2
sca-cpp/trunk/components/cache/memcache.hpp
vendored
2
sca-cpp/trunk/components/cache/memcache.hpp
vendored
|
|
@ -63,7 +63,7 @@ public:
|
|||
MemCached(const list<string>& servers) : owner(true) {
|
||||
debug(servers, "memcache::memcached::servers");
|
||||
apr_pool_create(&pool, NULL);
|
||||
apr_memcache_create(pool, 1, 0, &mc);
|
||||
apr_memcache_create(pool, (apr_uint16_t)length(servers), 0, &mc);
|
||||
addServers(servers);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -98,7 +98,7 @@ host replication all samenet trust
|
|||
EOF
|
||||
|
||||
# Create the db
|
||||
$pgsql_prefix/bin/pg_ctl start -W -D $root/sqldb/data 2>&1 | sh $root/sqldb/logger
|
||||
($pgsql_prefix/bin/pg_ctl start -W -D $root/sqldb/data 2>&1 | sh $root/sqldb/logger)&
|
||||
sti=0
|
||||
while [ $sti -ne 30 ]; do
|
||||
st=`$pgsql_prefix/bin/pg_ctl status -D $root/sqldb/data | grep 'server is running'`
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ mkdir -p $root/sqldb/archive
|
|||
|
||||
# Initialize from a backup of the master
|
||||
if [ ! -f $root/sqldb/data/postgresql.conf ]; then
|
||||
(wget http://$mhost:$mhttpport/pgsql-backup -O - | tar -C $root/sqldb -xz) 2>&1 | sh $root/sqldb/logger
|
||||
(curl -L http://$mhost:$mhttpport/pgsql-backup | tar -C $root/sqldb -xz) 2>&1 | sh $root/sqldb/logger
|
||||
rm -rf $root/sqldb/data/postmaster.pid $root/sqldb/data/pg_xlog
|
||||
mkdir -p $root/sqldb/data/pg_xlog/archive_status
|
||||
chmod 700 $root/sqldb/data/pg_xlog/archive_status
|
||||
|
|
@ -104,7 +104,7 @@ primary_conninfo = 'host=$mhost port=$mport'
|
|||
# Failover
|
||||
trigger_file = '$root/sqldb/failover'
|
||||
|
||||
restore_command = 'wget http://$mhost:$mhttpport/pgsql-archive/%f -O "%p"'
|
||||
restore_command = 'curl http://$mhost:$mhttpport/pgsql-archive/%f -o "%p"'
|
||||
|
||||
EOF
|
||||
|
||||
|
|
|
|||
|
|
@ -231,7 +231,9 @@ const failable<value> get(const value& key, const PGSql& pgsql) {
|
|||
return mkfailure<value>(string("Couldn't execute select postgresql SQL statement: ") + pgfailure(r, pgsql.conn));
|
||||
if (PQntuples(r) < 1) {
|
||||
PQclear(r);
|
||||
return mkfailure<value>(string("Couldn't get postgresql entry: ") + PQerrorMessage(pgsql.conn));
|
||||
ostringstream os;
|
||||
os << "Couldn't get postgresql entry: " << key;
|
||||
return mkfailure<value>(str(os));
|
||||
}
|
||||
const char* data = PQgetvalue(r, 0, 1);
|
||||
const value val(scheme::readValue(string(data)));
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from util import *
|
|||
|
||||
# Convert a particular user id to an account id
|
||||
def accountid(user):
|
||||
return ("'accounts", "'" + user.id(), "'user.account")
|
||||
return ("accounts", user.id(), "user.account")
|
||||
|
||||
# Get the current user's account
|
||||
def get(id, user, cache):
|
||||
|
|
|
|||
|
|
@ -21,17 +21,7 @@ from util import *
|
|||
|
||||
# Convert an id to an app id
|
||||
def appid(id):
|
||||
return ("'apps", "'" + car(id), "'app.stats")
|
||||
|
||||
# Link implementation resources into an app
|
||||
def mkapplink(id):
|
||||
try:
|
||||
os.symlink('../../../../../../nuvem/nuvem-parallel/nuvem', 'data/apps/' + car(id) + '/nuvem')
|
||||
os.symlink('../../../../../components', 'data/apps/' + car(id) + '/lib')
|
||||
os.mkdir('data/apps/' + car(id) + '/htdocs')
|
||||
except:
|
||||
pass
|
||||
return True
|
||||
return ("apps", car(id), "app.stats")
|
||||
|
||||
# Put an app into the apps db
|
||||
def put(id, app, cache, store, composites, pages):
|
||||
|
|
@ -41,12 +31,10 @@ def put(id, app, cache, store, composites, pages):
|
|||
# Update app in apps db
|
||||
if car(id) == eid:
|
||||
cache.put(appid(id), appentry)
|
||||
mkapplink(id)
|
||||
return True
|
||||
|
||||
# Clone an app's composite and page
|
||||
cache.put(appid(id), appentry)
|
||||
mkapplink(id)
|
||||
composites.put(id, composites.get((eid,)))
|
||||
pages.put(id, pages.get((eid,)))
|
||||
return True
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from util import *
|
|||
|
||||
# Convert an id to an app id
|
||||
def appid(id):
|
||||
return ("'apps", "'" + car(id), "'app.composite")
|
||||
return ("apps", car(id), "app.composite")
|
||||
|
||||
# Put an app into the apps db
|
||||
def put(id, app, cache):
|
||||
|
|
|
|||
|
|
@ -20,14 +20,18 @@ from util import *
|
|||
|
||||
# Convert a particular user id to a dashboard id
|
||||
def dashboardid(user):
|
||||
return ("'dashboards", "'" + user.id(), "'user.apps")
|
||||
return ("dashboards", user.id(), "user.apps")
|
||||
|
||||
# Get a dashboard from the cache
|
||||
def getdashboard(id, cache):
|
||||
dashboard = cache.get(id)
|
||||
if isNil(dashboard) or dashboard is None:
|
||||
val = cache.get(id)
|
||||
if isNil(val) or val is None:
|
||||
return ()
|
||||
return dashboard
|
||||
return cdddr(car(val))
|
||||
|
||||
# Put a dashboard into the cache
|
||||
def putdashboard(id, dashboard, cache):
|
||||
val = ((("'feed", ("'title", "Your Apps"), ("'id", cadr(id))) + dashboard),)
|
||||
|
||||
# Put an app into the user's dashboard
|
||||
def put(id, app, user, cache, apps):
|
||||
|
|
@ -40,7 +44,7 @@ def put(id, app, user, cache, apps):
|
|||
|
||||
appentry = (("'entry", cadr(car(app)), ("'id", car(id))),)
|
||||
dashboard = putapp(appentry, getdashboard(dashboardid(user), cache))
|
||||
cache.put(dashboardid(user), dashboard)
|
||||
putdashboard(dashboardid(user), dashboard, cache)
|
||||
|
||||
# Update app in app repository
|
||||
apps.put(id, app);
|
||||
|
|
@ -72,7 +76,7 @@ def delete(id, user, cache, apps):
|
|||
return cons(car(dashboard), deleteapp(id, cdr(dashboard)))
|
||||
|
||||
dashboard = deleteapp(id, getdashboard(dashboardid(user), cache))
|
||||
cache.put(dashboardid(user), dashboard)
|
||||
putdashboard(dashboardid(user), dashboard, cache)
|
||||
|
||||
# Delete app from app repository
|
||||
apps.delete(id);
|
||||
|
|
|
|||
|
|
@ -123,7 +123,7 @@
|
|||
<component name="name2" title="" color="orange1">
|
||||
<implementation.python script="nuvem/name.py"/>
|
||||
<service name="name"/>
|
||||
<property>https://testhttp.sca-store.com:8453/components/property</property>
|
||||
<property>https://testhttp.example.com:8453/components/property</property>
|
||||
</component>
|
||||
<component name="number" title="#" color="orange1">
|
||||
<implementation.python script="nuvem/number.py"/>
|
||||
|
|
@ -182,7 +182,7 @@
|
|||
<component name="text5" title=" '{propval}'" color="orange1">
|
||||
<implementation.python script="nuvem/text.py"/>
|
||||
<service name="text"/>
|
||||
<property>https://testhttp.sca-store.com:8453/components/property</property>
|
||||
<property>https://testhttp.example.com:8453/components/property</property>
|
||||
</component>
|
||||
<component x="13" y="58" name="timer3" title="timer" color="green1">
|
||||
<implementation.python script="nuvem/timer.py"/>
|
||||
|
|
|
|||
|
|
@ -146,7 +146,7 @@
|
|||
<component name="name" title="" color="orange1">
|
||||
<implementation.python script="nuvem/name.py"/>
|
||||
<service name="name"/>
|
||||
<property>https://testhttp.sca-store.com:8453/components/property</property>
|
||||
<property>https://testhttp.example.com:8453/components/property</property>
|
||||
</component>
|
||||
<component x="630" y="350" name="name1" title="" color="orange1">
|
||||
<implementation.python script="nuvem/name.py"/>
|
||||
|
|
|
|||
|
|
@ -93,7 +93,7 @@
|
|||
<component name="text" title=" '{propval}'" color="orange1">
|
||||
<implementation.python script="nuvem/text.py"/>
|
||||
<service name="text"/>
|
||||
<property>http://sca-store.com/</property>
|
||||
<property>http://example.com/</property>
|
||||
</component>
|
||||
<component x="400" y="10" name="text1" title=" '{propval}'" color="orange1">
|
||||
<implementation.python script="nuvem/text.py"/>
|
||||
|
|
|
|||
|
|
@ -0,0 +1 @@
|
|||
((feed (title "Your Apps") (id "jane@example.com") (entry (title "An empty test app") (id "test"))))
|
||||
|
|
@ -1 +1 @@
|
|||
((entry (title "An empty test app") (id "test")))
|
||||
((feed (title "Your Apps") (id "jane@localhost") (entry (title "An empty test app") (id "test"))))
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
((entry (title "An empty test app") (id "test")))
|
||||
|
|
@ -0,0 +1 @@
|
|||
((feed (title "Your Apps") (id "john@example.com") (entry (title "An empty test app") (id "test"))))
|
||||
|
|
@ -1 +1 @@
|
|||
((entry (title "An empty test app") (id "test")))
|
||||
((feed (title "Your Apps") (id "john@localhost") (entry (title "An empty test app") (id "test"))))
|
||||
|
|
|
|||
|
|
@ -1 +0,0 @@
|
|||
((entry (title "An empty test app") (id "test")))
|
||||
|
|
@ -1 +1 @@
|
|||
((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")) (entry (title "An empty test app") (id "test")) (entry (title "Test values and lists") (id "testvalues")) (entry (title "Test social components") (id "testsocial")) (entry (title "Test URL components") (id "testurl")) (entry (title "Test logic components") (id "testlogic")) (entry (title "Test text processing components") (id "testtext")) (entry (title "Test HTTP components") (id "testhttp")) (entry (title "Test SMS API") (id "testsms")) (entry (title "Test widgets") (id "testwidgets")) (entry (title "Test more widgets") (id "testwidgets2")) (entry (title "Test event components") (id "testevents")) (entry (title "Test search components") (id "testsearch")) (entry (title "Test database components") (id "testdb")) (entry (title "Test HTML generator components") (id "testwidgets3")) (entry (title "Test animation components") (id "testanimation")))
|
||||
((feed (title "App Store") (id "all") (entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")) (entry (title "An empty test app") (id "test")) (entry (title "Test values and lists") (id "testvalues")) (entry (title "Test social components") (id "testsocial")) (entry (title "Test URL components") (id "testurl")) (entry (title "Test logic components") (id "testlogic")) (entry (title "Test text processing components") (id "testtext")) (entry (title "Test HTTP components") (id "testhttp")) (entry (title "Test SMS API") (id "testsms")) (entry (title "Test widgets") (id "testwidgets")) (entry (title "Test more widgets") (id "testwidgets2")) (entry (title "Test event components") (id "testevents")) (entry (title "Test search components") (id "testsearch")) (entry (title "Test database components") (id "testdb")) (entry (title "Test HTML generator components") (id "testwidgets3")) (entry (title "Test animation components") (id "testanimation"))))
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
|
||||
((feed (title "App Store") (id "featured") (entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms"))))
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
|
||||
((feed (title "App Store") (id "new") (entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms"))))
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
((entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms")))
|
||||
((feed (title "App Store") (id "top") (entry (title "Check my public social data") (id "me360")) (entry (title "Where are my friends") (id "nearme")) (entry (title "Where are my friends") (id "nearme2")) (entry (title "Our photos of an event") (id "ourphotos")) (entry (title "Slice") (id "slice")) (entry (title "My online store") (id "shoppingcart")) (entry (title "SMS send service") (id "twsms"))))
|
||||
|
|
|
|||
|
|
@ -1997,7 +1997,7 @@ function installpalette(name, pos, g, bg, palette, gpalettes) {
|
|||
function save(savexml) {
|
||||
showStatus('Saving');
|
||||
savedcomposxml = savexml;
|
||||
var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
|
||||
var entry = '<?xml version="1.0" encoding="UTF-8"?>\n' + '<entry xmlns="http://www.w3.org/2005/Atom">' +
|
||||
'<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml">' +
|
||||
savedcomposxml + '</content></entry>';
|
||||
composites.put(appname, entry, function(e) {
|
||||
|
|
|
|||
|
|
@ -872,7 +872,7 @@ function save(newxml) {
|
|||
savedpagexhtml = newxml;
|
||||
|
||||
// Update the page ATOM entry
|
||||
var entry = '<entry xmlns="http://www.w3.org/2005/Atom">' +
|
||||
var entry = '<?xml version="1.0" encoding="UTF-8"?>\n' + '<entry xmlns="http://www.w3.org/2005/Atom">' +
|
||||
'<title type="text">' + appname + '</title><id>' + appname + '</id><content type="application/xml">' +
|
||||
newxml + '</content></entry>';
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from util import *
|
|||
|
||||
# Convert an id to an app id
|
||||
def appid(id):
|
||||
return ("'apps", "'" + car(id), "'htdocs", "'app.html")
|
||||
return ("apps", car(id), "htdocs", "app.html")
|
||||
|
||||
# Put an app page into the apps db
|
||||
def put(id, app, cache):
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from util import *
|
|||
|
||||
# Convert an id to a palette id
|
||||
def paletteid(id):
|
||||
return ("'palettes", "'" + car(id), "'palette.composite")
|
||||
return ("palettes", car(id), "palette.composite")
|
||||
|
||||
# Put a palette into the palettes db
|
||||
def put(id, palette, cache):
|
||||
|
|
|
|||
|
|
@ -19,10 +19,10 @@
|
|||
from util import *
|
||||
|
||||
# Get the database to use for a particular key
|
||||
def get(id, db1, db2):
|
||||
def get(id, db):
|
||||
if isNil(id):
|
||||
return db1
|
||||
return db[0]
|
||||
if cadr(id)[0:1].lower() < 'm':
|
||||
return db1
|
||||
return db2
|
||||
return db[0]
|
||||
return db[1]
|
||||
|
||||
|
|
|
|||
|
|
@ -20,14 +20,18 @@ from util import *
|
|||
|
||||
# Convert a particular store tag to a store id
|
||||
def storeid(tag):
|
||||
return ("'store", "'" + tag, "'store.apps")
|
||||
return ("store", tag, "store.apps")
|
||||
|
||||
# Get a store from the cache
|
||||
def getstore(id, cache):
|
||||
store = cache.get(id)
|
||||
if isNil(store) or store is None:
|
||||
val = cache.get(id)
|
||||
if isNil(val) or val is None:
|
||||
return ()
|
||||
return store
|
||||
return cdddr(car(val))
|
||||
|
||||
# Put a store into the cache
|
||||
def putstore(id, store, cache):
|
||||
val = ((("'feed", ("'title", "App Store"), ("'id", cadr(id))) + store),)
|
||||
|
||||
# Put an app into a store
|
||||
def put(key, app, cache):
|
||||
|
|
@ -40,7 +44,7 @@ def put(key, app, cache):
|
|||
|
||||
tag = car(key)
|
||||
store = putapp(app, getstore(storeid(tag), cache))
|
||||
cache.put(storeid(tag), store)
|
||||
putstore(storeid(tag), store, cache)
|
||||
return True
|
||||
|
||||
# Get apps from a store
|
||||
|
|
@ -75,6 +79,6 @@ def delete(key, cache):
|
|||
return cons(car(store), deleteapp(id, cdr(store)))
|
||||
|
||||
store = deleteapp(id, getstore(storeid(tag), cache))
|
||||
cache.put(storeid(tag), store)
|
||||
putstore(storeid(tag), store, cache)
|
||||
return True
|
||||
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ INCLUDES = -I${HTTPD_INCLUDE}
|
|||
incl_HEADERS = *.hpp
|
||||
incldir = $(prefix)/include/modules/http
|
||||
|
||||
dist_mod_SCRIPTS = httpd-conf httpd-addr httpd-start httpd-stop httpd-restart ssl-ca-conf ssl-cert-conf ssl-cert-find httpd-ssl-conf basic-auth-conf cert-auth-conf form-auth-conf open-auth-conf passwd-auth-conf group-auth-conf proxy-conf proxy-ssl-conf proxy-member-conf proxy-ssl-member-conf proxy-ssl-nossl-member-conf vhost-conf vhost-ssl-conf tunnel-ssl-conf httpd-worker-conf httpd-event-conf minify-html minify-js minify-css
|
||||
dist_mod_SCRIPTS = httpd-conf httpd-addr httpd-start httpd-stop httpd-restart ssl-ca-conf ssl-cert-conf ssl-cert-find httpd-ssl-conf basic-auth-conf cert-auth-conf form-auth-conf open-auth-conf passwd-auth-conf group-auth-conf proxy-conf proxy-ssl-conf proxy-member-conf proxy-ssl-member-conf proxy-ssl-nossl-member-conf vhost-conf vhost-ssl-conf tunnel-ssl-conf httpd-worker-conf httpd-event-conf httpd-loglevel-conf minify-html minify-js minify-css
|
||||
moddir = $(prefix)/modules/http
|
||||
|
||||
curl_test_SOURCES = curl-test.cpp
|
||||
|
|
|
|||
|
|
@ -634,7 +634,7 @@ const failable<list<list<string> > > contentRequest(const value& c, unused const
|
|||
if (isString(car<value>(c)) && !isNil(cdr<value>(c)) && isList(cadr<value>(c)))
|
||||
return writeRequest(convertValues<string>(cadr<value>(c)), car<value>(c));
|
||||
|
||||
// Write an assoc value as a JSON result
|
||||
// Write an assoc value as JSON
|
||||
if (isSymbol(car<value>(c)) && !isNil(cdr<value>(c))) {
|
||||
js::JSContext cx;
|
||||
const list<value> lc = mklist<value>(c);
|
||||
|
|
@ -888,7 +888,7 @@ const string queryString(const list<list<value> > args) {
|
|||
* Filter path segment in a list of arguments.
|
||||
*/
|
||||
const bool filterPath(const value& arg) {
|
||||
return isString(arg);
|
||||
return isString(arg) || isSymbol(arg);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -914,11 +914,13 @@ struct proxy {
|
|||
}
|
||||
|
||||
const value operator()(const list<value>& args) const {
|
||||
debug(args, "http::proxy::args");
|
||||
const value fun = car(args);
|
||||
if (fun == "get") {
|
||||
const list<value> lp = filter<value>(filterPath, cadr(args));
|
||||
debug(lp, "http::queryString::arg");
|
||||
debug(lp, "http::proxy::path");
|
||||
const list<value> lq = map<value, value>(escapeQuery, filter<value>(filterQuery, cadr(args)));
|
||||
debug(lp, "http::proxy::query");
|
||||
const value p = path(lp);
|
||||
const value q = queryString(lq);
|
||||
const failable<value> val = get(uri + p + (q != ""? string("?") + q : string("")), cs);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue