Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 Design | 1 Design |
| 2 ====== | 2 ====== |
| 3 | 3 |
| 4 | 4 |
| 5 Overview | 5 Overview |
| 6 -------- | 6 -------- |
| 7 Allows trying out Skia code in the browser. | 7 Allows trying out Skia code in the browser. |
| 8 | 8 |
| 9 | 9 |
| 10 Security | 10 Security |
| (...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 129 $ mysql --host=173.194.83.52 --user=root --password | 129 $ mysql --host=173.194.83.52 --user=root --password |
| 130 | 130 |
| 131 Initial setup of the database, the user, and the only table: | 131 Initial setup of the database, the user, and the only table: |
| 132 | 132 |
| 133 CREATE DATABASE webtry; | 133 CREATE DATABASE webtry; |
| 134 USE webtry; | 134 USE webtry; |
| 135 CREATE USER 'webtry'@'%' IDENTIFIED BY '<password is in valentine>'; | 135 CREATE USER 'webtry'@'%' IDENTIFIED BY '<password is in valentine>'; |
| 136 GRANT SELECT, INSERT, UPDATE ON webtry.webtry TO 'webtry'@'%'; | 136 GRANT SELECT, INSERT, UPDATE ON webtry.webtry TO 'webtry'@'%'; |
| 137 GRANT SELECT, INSERT, UPDATE ON webtry.workspace TO 'webtry'@'%'; | 137 GRANT SELECT, INSERT, UPDATE ON webtry.workspace TO 'webtry'@'%'; |
| 138 GRANT SELECT, INSERT, UPDATE ON webtry.workspacetry TO 'webtry'@'%'; | 138 GRANT SELECT, INSERT, UPDATE ON webtry.workspacetry TO 'webtry'@'%'; |
| 139 GRANT SELECT, INSERT, UPDATE ON webtry.sources TO 'webtry'@'%'; | |
|
mtklein
2014/05/29 15:26:19
Needs update?
jcgregorio
2014/05/29 15:37:32
Good catch, done.
On 2014/05/29 15:26:19, mtklein
| |
| 139 | 140 |
| 140 // If this gets changed also update the sqlite create statement in webtry.go . | 141 // If this gets changed also update the sqlite create statement in webtry.go . |
| 141 | 142 |
| 142 CREATE TABLE webtry ( | 143 CREATE TABLE webtry ( |
| 143 code TEXT DEFAULT '' NOT NULL, | 144 code TEXT DEFAULT '' NOT NULL, |
| 144 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, | 145 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, |
| 145 hash CHAR(64) DEFAULT '' NOT NULL, | 146 hash CHAR(64) DEFAULT '' NOT NULL, |
| 146 PRIMARY KEY(hash) | 147 source_image_id INTEGER DEFAULT 0 NOT NULL, |
| 148 PRIMARY KEY(hash), | |
| 149 | |
| 150 FOREIGN KEY (source) REFERENCES sources(id) | |
| 147 ); | 151 ); |
| 148 | 152 |
| 149 CREATE TABLE workspace ( | 153 CREATE TABLE workspace ( |
| 150 name CHAR(64) DEFAULT '' NOT NULL, | 154 name CHAR(64) DEFAULT '' NOT NULL, |
| 151 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, | 155 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, |
| 152 PRIMARY KEY(name) | 156 PRIMARY KEY(name), |
| 153 ); | 157 ); |
| 154 | 158 |
| 155 CREATE TABLE workspacetry ( | 159 CREATE TABLE workspacetry ( |
| 156 name CHAR(64) DEFAULT '' NOT NULL, | 160 name CHAR(64) DEFAULT '' NOT NULL, |
| 157 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, | 161 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, |
| 158 hash CHAR(64) DEFAULT '' NOT NULL, | 162 hash CHAR(64) DEFAULT '' NOT NULL, |
| 159 hidden INTEGER DEFAULT 0 NOT NULL, | 163 source_image_id INTEGER DEFAULT 0 NOT NULL, |
| 164 hidden INTEGER DEFAULT 0 NOT NULL, | |
| 160 | 165 |
| 161 FOREIGN KEY (name) REFERENCES workspace(name) | 166 FOREIGN KEY (name) REFERENCES workspace(name), |
| 162 ); | 167 ); |
| 163 | 168 |
| 169 CREATE TABLE source_images ( | |
| 170 id INTEGER PRIMARY KEY NOT NULL, | |
| 171 image MEDIUMBLOB DEFAULT '' NOT NULL, -- Stored as PN G. | |
| 172 width INTEGER DEFAULT 0 NOT NULL, | |
| 173 height INTEGER DEFAULT 0 NOT NULL, | |
| 174 create_ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, | |
| 175 hidden INTEGER DEFAULT 0 NOT NULL | |
| 176 ); | |
| 177 | |
| 178 ALTER TABLE webtry ADD COLUMN source_image_id INTEGER DEFAULT 0 NOT NU LL AFTER hash; | |
| 179 ALTER TABLE workspacetry ADD COLUMN source_image_id INTEGER DEFAULT 0 NOT NU LL AFTER hash; | |
| 180 | |
| 164 Common queries webtry.go will use: | 181 Common queries webtry.go will use: |
| 165 | 182 |
| 166 INSERT INTO webtry (code, hash) VALUES('int i = 0;...', 'abcdef...'); | 183 INSERT INTO webtry (code, hash) VALUES('int i = 0;...', 'abcdef...'); |
| 167 | 184 |
| 168 SELECT code, create_ts, hash FROM webtry WHERE hash='abcdef...'; | 185 SELECT code, create_ts, hash FROM webtry WHERE hash='abcdef...'; |
| 169 | 186 |
| 170 SELECT code, create_ts, hash FROM webtry ORDER BY create_ts DESC LIMIT 2; | 187 SELECT code, create_ts, hash FROM webtry ORDER BY create_ts DESC LIMIT 2; |
| 171 | 188 |
| 172 // To change the password for the webtry sql client: | 189 // To change the password for the webtry sql client: |
| 173 SET PASSWORD for 'webtry'@'%' = PASSWORD('<password is in valentine>'); | 190 SET PASSWORD for 'webtry'@'%' = PASSWORD('<password is in valentine>'); |
| 174 | 191 |
| 175 // Run before and after to confirm the password changed: | 192 // Run before and after to confirm the password changed: |
| 176 SELECT Host, User, Password FROM mysql.user; | 193 SELECT Host, User, Password FROM mysql.user; |
| 177 | 194 |
| 178 Common queries for workspaces: | 195 Common queries for workspaces: |
| 179 | 196 |
| 180 SELECT hash, create_ts FROM workspace ORDER BY create_ts DESC; | 197 SELECT hash, create_ts FROM workspace ORDER BY create_ts DESC; |
| 181 | 198 |
| 182 INSERT INTO workspace (name, hash) VALUES('autumn-river-12354', 'abcdef...') ; | 199 INSERT INTO workspace (name, hash) VALUES('autumn-river-12354', 'abcdef...') ; |
| 183 | 200 |
| 184 SELECT name FROM workspace GROUP BY name; | 201 SELECT name FROM workspace GROUP BY name; |
| 185 | 202 |
| 203 Common queries for sources: | |
| 204 | |
| 205 SELECT id, image, width, height, create_ts FROM source_images ORDER BY creat e_ts DESC LIMIT 100; | |
| 206 | |
| 186 Password for the database will be stored in the metadata instance, if the | 207 Password for the database will be stored in the metadata instance, if the |
| 187 metadata server can't be found, i.e. running locally, then a local sqlite | 208 metadata server can't be found, i.e. running locally, then a local sqlite |
| 188 database will be used. To see the current password stored in metadata and the | 209 database will be used. To see the current password stored in metadata and the |
| 189 fingerprint: | 210 fingerprint: |
| 190 | 211 |
| 191 gcutil --project=google.com:skia-buildbots getinstance skia-webtry-b | 212 gcutil --project=google.com:skia-buildbots getinstance skia-webtry-b |
| 192 | 213 |
| 193 To set the mysql password that webtry is to use: | 214 To set the mysql password that webtry is to use: |
| 194 | 215 |
| 195 gcutil --project=google.com:skia-buildbots setinstancemetadata skia-webtr y-b --metadata=password:'[mysql client webtry password]' --fingerprint=[some fin gerprint] | 216 gcutil --project=google.com:skia-buildbots setinstancemetadata skia-webtr y-b --metadata=password:'[mysql client webtry password]' --fingerprint=[some fin gerprint] |
| 196 | 217 |
| 197 To retrieve the password from the running instance just GET the right URL from | 218 To retrieve the password from the running instance just GET the right URL from |
| 198 the metadata server: | 219 the metadata server: |
| 199 | 220 |
| 200 curl "http://metadata/computeMetadata/v1/instance/attributes/password" -H "X -Google-Metadata-Request: True" | 221 curl "http://metadata/computeMetadata/v1/instance/attributes/password" -H "X -Google-Metadata-Request: True" |
| 201 | 222 |
| 202 N.B. If you need to change the MySQL password that webtry uses, you must change | 223 N.B. If you need to change the MySQL password that webtry uses, you must change |
| 203 it both in MySQL and the value stored in the metadata server. | 224 it both in MySQL and the value stored in the metadata server. |
| 204 | 225 |
| 226 Source Images | |
| 227 ------------- | |
| 228 | |
| 229 For every try the user can select an optional source image to use as an input. | |
| 230 The id of the source image is just an integer and is stored in the database | |
| 231 along with the other try information, such as the code. | |
| 232 | |
| 233 The actual image itself is also stored in a separate table, 'sources', in the | |
| 234 database. On startup we check that all the images are available in 'inout', | |
| 235 and write out the images if not. Since they are all written to 'inout' we can | |
| 236 use the same /i/ image handler to serve them. | |
| 237 | |
| 238 When a user uploads an image it is decoded and converted to PNG and stored | |
| 239 as a binary blog in the database. | |
|
mtklein
2014/05/29 15:26:19
blob?
jcgregorio
2014/05/29 15:37:32
Done.
| |
| 240 | |
| 241 The bitmap is available to user code as a module level variable: | |
| 242 | |
| 243 SkBitmap source; | |
| 244 | |
| 245 The bitmap is read, decoded and stored in source before the seccomp jail is | |
| 246 instantiated. | |
| 247 | |
| 248 | |
| 205 Squid | 249 Squid |
| 206 ----- | 250 ----- |
| 207 | 251 |
| 208 Squid is configured to run on port 80 and run as an accelerator for the actual | 252 Squid is configured to run on port 80 and run as an accelerator for the actual |
| 209 Go program which is running on port 8000. The config for the squid proxy is | 253 Go program which is running on port 8000. The config for the squid proxy is |
| 210 held in sys/webtry_squid, which is copied into place during installation and | 254 held in sys/webtry_squid, which is copied into place during installation and |
| 211 squid is kept running via monit. | 255 squid is kept running via monit. |
| 212 | 256 |
| 213 Workspaces | 257 Workspaces |
| 214 ---------- | 258 ---------- |
| (...skipping 14 matching lines...) Expand all Loading... | |
| 229 * clike.js - C-like syntax highlighting support | 273 * clike.js - C-like syntax highlighting support |
| 230 | 274 |
| 231 Alternatively, we may consider pulling CM as an external dependency at some | 275 Alternatively, we may consider pulling CM as an external dependency at some |
| 232 point. | 276 point. |
| 233 | 277 |
| 234 Installation | 278 Installation |
| 235 ------------ | 279 ------------ |
| 236 See the README file. | 280 See the README file. |
| 237 | 281 |
| 238 | 282 |
| OLD | NEW |