User:Clouserw/ProductDetailsFeed

From MozillaWiki
Jump to: navigation, search
Draft-template-image.png THIS PAGE IS A WORKING DRAFT Pencil-emoji U270F-gray.png
The page may be difficult to navigate, and some information on its subject might be incomplete and/or evolving rapidly.
If you have any questions or ideas, please add them as a new topic on the discussion page.

Description

The goal of this project is to replace product-details. When product-details was first written it provided the current version number of Firefox and Thunderbird for mozilla.com. Since then it has grown to include all locales, beta/dev versions, all release dates, several ways of rendering the information in HTML, as well as being used on mozilla.com, mozilla-europe.org, mozillaonline.com, and addons.mozilla.org. Having to update product-details, push the changes through SVN, and then update each site's SVN external is time consuming and error prone. By replacing product-details with this feed it should be possible to easily update version numbers with minimal interaction as well as allow more sites (including non-php based sites) to use the information and be notified of the latest versions of mozilla products.

Use Cases

What questions are people answering with this feed?

  • What is the latest stable version of $product in $locale?
  • What are all the locales that offer a beta version of $product?
  • Which locales are not offering the latest stable version of $product?
  • How do you spell $language in $language?
  • What locales do we offer in $continent? (Not currently supported by product details but is being added)

Implementation Details/Info

We want to combine information in Bouncer and AUS to build this feed. The feed needs access to the actual file system to retrieve file sizes as well as bouncer's database. Anything that is slow (like filesizes) will go into memcache.

The feed will be generated from parameters in a URL. The URL format is:

xxx.mozilla.com/%FEED_VERSION%/%FEED_NAME%/

  • %FEED_VERSION% is for future use if the format of the URL changes. For now it is '1'
  • %FEED_NAME% chooses the feed to return. One of "products" or "locales" currently.

Optional GET parameters include:

  • product a comma separated list of products. At launch must be one of "firefox" or "thunderbird". Will expand to include other products later. By default return all.
  • locale a comma separated list of locales. By default return all locales.
  • version a string representing a version number or one of "latest" or "all". By default return latest versions.
  • platform a comma separated list of operating systems (must be one of "windows" "linux" or "osx"). By default return all OSs.
  • channel a comma separated list of channels. Must be one of "nightly" "release" "betatest" "releasetest". By default return release.
  • output what format to return the information in. By default XML. (And only XML at launch)

Examples

URL Requested:

xxx.mozilla.com/1/products?product=firefox&locale=en-us,fr&platform=linux

XML Returned (not including DTD, etc.):

<pubDate>Mon, 5 Jan 2008 01:02:03 +0000</pubDate>
<products name="firefox">
  <product>
    <channel>release</channel>
    <version>3.0.5</version>
    <pubDate>2008-12-20 11:11:11 +0000"></pubDate>
    <language>
      <code standard="639-1">en-US</code>
      <English>English (US)</English>
      <native>English (US)</native>
      <region />
      <continent />
    </language>
    <files platform="linux">
      <link>http:// ........tar.gz</link>
      <filesize>111111111</filesize>
      <hashFunction>MD5</hashFunction>
      <hashValue>...</hashValue>
    <files>
  </product>
  <product>
    <channel>release</channel>
    <version>3.0.5</version>
    <pubDate>2008-12-20 11:11:11 +0000"></pubDate>
    <language>
      <code standard="639-1">fr</code>
      <English>French</English>
      <native>Français</native>
      <region />
      <continent />
    </language>
    <files platform="linux">
      <link>http:// ........tar.gz</link>
      <filesize>111111111</filesize>
      <hashFunction>MD5</hashFunction>
      <hashValue>...</hashValue>
    <files>
  </product>
</products>

Questions that need answering

  • How do we test a new version on stage.mozilla.com? Traditionally we update moz.com staging with new versions, QA runs through it, then we update the live site. If it's all coming off a feed, how do we update one before the other?
      • Dev, Stage, and Prod endpoints?
  • product-details currently defines a latest version (3.x) , a latest "older" version (the 2.x branch in this case), and a devel version (3.xby). I think these are covered by the channel parameter above but would like confirmation.
  • Are there other channels that aren't included above? Is having the channels be a comma separated list useful or should it only accept one?
      • Metrics would me interested in this channel and possibly others
  • What should be added/removed from the XML?
  • I added the %FEED_NAME% parameter in the hopes of making it easier to query by locale. (examples in the use cases above). I didn't write XML for it yet because I'm not sure that's the best way to approach this anymore. It seems like it's duplicating a lot. Happy to have input.
  • Are the "comma separated value" parameters useful or just complicating things?
  • The more I look at this the more I think the XML we'll be passing around will be huge particularly on pages like http://www.mozilla.com/en-US/firefox/all.html. Is there a better way to do this?
      • paginate it? use Atompub?